在 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
。再次,在适当的时候使用否定对应物将导致更清晰的错误消息。