Pythonでsys.exitやsys.stderrへの書き込みをテストする
エラー時にstderrへメッセージを出力し、sys.exitするスクリプトをテストするのに以下のように書いてみました
sys.exitについてはSystemExitで補足できますので、それでテストできます。
sys.stderrについてはmockに置き換えて、writeされた値を保存しておいて、後で期待通りのメッセージかどうかassertEqualsでテストしてます
import sys import unittest def dummy_method(): sys.stderr.write('error!!!') sys.exit(2) class DevNull(object): data = [] def write(self, data): self.data.append(data) def clear(self): self.data = [] class DummyTest(unittest.TestCase): def setUp(self): self._stderr = DevNull() self.original_stderr = sys.stderr sys.stderr = self._stderr def tearDown(self): sys.stderr = self.original_stderr def test_dummy(self): try: dummy_method() except SystemExit, e: self.assertEqual(e.code, 2) self.assertEqual(self._stderr.data[0], 'error!!!') else: self.fail('SystemExit exception expected') if __name__ == '__main__': unittest.main()