私はテストを書いていて、使用するように言っている人がいることを聞いたことがあります self.assertFalse
ではなく assert False
。なぜこれがあり、どんな利点があるのですか?
_assert False
_は、有用なログ情報なしで例外をスローします。テストにエラーがありました。
self.assertFalse()
は、メッセージやテスト名などのテスト失敗情報を含むテスト失敗例外をスローします。
エラー(テストを実行できなかった)と失敗(テストコードは機能しましたが、間違った回答が生成されました)には違いがあります。
エラーはコードの深刻な問題です。
失敗は、修正が必要な失敗にすぎません。
走れば
_import unittest
class Test_Unittest(unittest.TestCase):
def test_assert(self):
assert False
def test_assertFalse(self):
self.assertFalse(True)
if __name__ == '__main__':
unittest.main()
_
同じロギング情報、同じ失敗を取得します。
_FF
======================================================================
FAIL: test_assert (__main__.Test_Unittest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/unutbu/pybin/test.py", line 6, in test_assert
assert False
AssertionError
======================================================================
FAIL: test_assertFalse (__main__.Test_Unittest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/unutbu/pybin/test.py", line 8, in test_assertFalse
self.assertFalse(True)
AssertionError
----------------------------------------------------------------------
Ran 2 tests in 0.000s
FAILED (failures=2)
_
両方が同じように処理される理由は、_unittest.TestCase
_が定義するためです
_failureException = AssertionError
_
_assert False
_と言うとAssertionErrorが発生します。
self.assertFalse(True)
と言うと、failureExeception
が発生します。
これらの例外は同じであるため、明らかな違いはありません。
ただし、assert
と_self.assertFalse
_は、従来の使用法とは異なります。
assert
は、特定の条件がコードの特定のポイントで保持されることを宣言するために使用されます。開発時には松葉杖として使用されますが、量産コードで使用するためのものではありません。 _python -O my_unittest.py
_を実行すると、すべてのassertステートメントが無視されます。これは、assert
の意図した使用法を覆し、失敗した場合でもユニットテストに合格する可能性があります。
(-Oフラグなしで)結果は同じですが、assert
は単体テストコードで使用するためのものではありません。単体テストを作成するときは、_self.assertTrue
_または_self.assertFalse
_を使用します。