簡略して書きますと、整数の和を得る、というtashizan関数についてunittestを用いて書いています。
python
1def tashizan(a,b): 2 try: 3 return int(a)+int(b) 4 except ValueError: 5 print("a,bは整数ではなく文字列の可能性があります") 6 sys.exit(1)
関数を見る通り、引数にINTEGERではなく文字列が渡されたとき、スクリプトを止めたいためexcept ValueErrorで標準出力した後にsys.exit()でスクリプトを止めます。これをunittestで書いた場合以下のように書きました。関数の書き方及びunittestの書き方にアドバイスが有れば指摘してほしいです。現状ではFAILED (errors=1)になってしまいます。異常な引数を受け取ったらスクリプトを止める、かつ、unittestでFAILEDが表示されないことを目指しています。
python
1import unittest , tashizan 2 3class TestTashizan(unittest.TestCase): 4 5 def test_tashizan_1(self): 6 expected = 8 7 actual = tashizan(2, 6) 8 self.assertEqual(expected, actual) 9 10 def test_tashizan_2(self): 11 expected = 8 12 actual = tashizan(6, "2") 13 self.assertEqual(expected, actual) 14 15 16 def test_tashizan_3(self): 17 actual = tashizan("a", "6") 18 self.assertRaises(ValueError) 19 20 21if __name__ == "__main__": 22 unittest.main(exit=False)
結果は以下のようになります。
..a,bは整数ではなく文字列の可能性があります E ====================================================================== ERROR: test_tashizan_3 (__main__.TestTashizan) ---------------------------------------------------------------------- Traceback (most recent call last): File "C:\Users\USER\Desktop\function.py", line 7, in tashizan return int(a) + int(b) ValueError: invalid literal for int() with base 10: 'a' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "unit_test.py", line 21, in test_tashizan_3 actual = tashizan("a", "6") File "C:\Users\USER\Desktop\function.py", line 10, in tashizan sys.exit(1) SystemExit: 1 ---------------------------------------------------------------------- Ran 3 tests in 0.001s FAILED (errors=1)
なお関数のsys.exit()をコメントアウトするとFAILEDは表示されずうまくいくのですが、本来の目的であるスクリプトを止めるのが実現できなくなってしまいます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/08 15:41