在 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。再次,在適當的時候使用否定對應物將導致更清晰的錯誤訊息。