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