回答:
はい。sys.exit
レイズなSystemExit
ので、次のコマンドで確認できますassertRaises
。
with self.assertRaises(SystemExit):
your_method()
のインスタンスにSystemExit
は、code
提案された終了ステータスに設定された属性があり、によって返されるコンテキストマネージャにassertRaises
は、キャッチされた例外インスタンスがexception
としてあるため、終了ステータスの確認は簡単です。
with self.assertRaises(SystemExit) as cm:
your_method()
self.assertEqual(cm.exception.code, 1)
Pythonを終了します。これは、
SystemExit
例外を発生させることによって実装されます...外部レベルでの終了試行を傍受することが可能です。
sys.exit(1)
(たとえば、ではなくsys.exit(0)
)であることを確認したい場合は、実際にそれcode
が1であることをアサートする必要がありassertRaisesRegexp(SystemExit, '1')
ます。
unittest
するために例外と呼び出し可能な述語を渡すことができるメソッドがあると確信していましたが、私はそうではありません。私が考えている他のテストモジュールはありますか?
self.assertRaisesRegex( SystemExit, '^2$', testMethod )
コードが少なく、十分に読みやすい。
self.assertRaisesRegexp
これが完全な動作例です。Pavelのすばらしい回答にもかかわらず、これを理解するのにしばらく時間がかかったので、役立つことを期待してここに含めます。
import unittest
from glf.logtype.grinder.mapping_reader import MapReader
INCOMPLETE_MAPPING_FILE="test/data/incomplete.http.mapping"
class TestMapReader(unittest.TestCase):
def test_get_tx_names_incomplete_mapping_file(self):
map_reader = MapReader()
with self.assertRaises(SystemExit) as cm:
tx_names = map_reader.get_tx_names(INCOMPLETE_MAPPING_FILE)
self.assertEqual(cm.exception.code, 1)
あなたの質問に対する答えは、Pythonユニットテストのドキュメントで「例外のテスト」を検索して見つかりました。例を使用すると、単体テストは次のようになります。
self.assertRaises(SystemExit, your_function, argument 1, argument 2)
関数のテストに必要なすべての引数を含めることを忘れないでください。