在 Unittests 中選擇斷言
雖然 Python 有一個 assert
語句 ,但 Python 單元測試框架有更好的專門用於測試的斷言:它們在故障方面提供更多資訊,並且不依賴於執行的除錯模式。
也許最簡單的斷言是 assertTrue
,可以像這樣使用:
import unittest
class SimplisticTest(unittest.TestCase):
def test_basic(self):
self.assertTrue(1 + 1 == 2)
這將執行正常,但替換上面的行
self.assertTrue(1 + 1 == 3)
將失敗。
assertTrue
斷言很可能是最普遍的斷言,因為任何測試都可以作為一些布林條件,但通常有更好的選擇。在測試相等性時,如上所述,最好編寫
self.assertEqual(1 + 1, 3)
當前者失敗時,訊息是
======================================================================
FAIL: test (__main__.TruthTest)
Traceback (most recent call last):
File "stuff.py", line 6, in test
self.assertTrue(1 + 1 == 3)
AssertionError: False is not true
但是當後者失敗時,資訊是
======================================================================
FAIL: test (__main__.TruthTest)
Traceback (most recent call last):
File "stuff.py", line 6, in test
self.assertEqual(1 + 1, 3)
AssertionError: 2 != 3
這是更有用的資訊(它實際上評估了左手邊的結果)。
你可以在標準文件中找到斷言列表。一般來說,選擇最適合條件的斷言是個好主意。因此,如上所示,為了斷言 1 + 1 == 2
,使用 assertEqual
比使用 assertTrue
更好。同樣,為了斷言 a is None
,最好使用 assertIsNone
而不是 assertEqual
。
另請注意,斷言具有否定形式。因此,assertEqual
具有負對應物 assertNotEqual
,而 assertIsNone
具有負對應物 assertIsNotNone
。再次,在適當的時候使用否定對應物將導致更清晰的錯誤訊息。