Python: unittest能显示预期值和实际值吗?

23 投票
3 回答
15319 浏览
提问于 2025-04-16 09:37

如果我在一个unittest.TestCase里有一个断言,像下面这样:

self.assertTrue( person.age == 42, "age incorrect")

当这个断言失败时,它会显示“年龄不正确”的信息。我还想看到期望的值和实际的值。有什么好的方法可以做到这一点吗?unittest能做到吗?

编辑

我希望看到类似这样的信息:

“年龄不正确:期望值42,实际值39”

3 个回答

5

查看:assertEqual

self.assertEqual(person.age, 42, 'age incorrect')

或者使用默认信息(来回应评论):

self.assertEqual(person.age, 42)
30

你可以把 longMessage 这个属性设置为 True

expected_age = 42
actual_age = person.age # 39
self.longMessage = True
self.assertEqual(expected_age, actual_age, 'age incorrect')

这样你会得到类似这样的结果:

AssertionError: 42 != 39 : age incorrect

参考链接: https://docs.python.org/2/library/unittest.html#unittest.TestCase.longMessage

13

你可以用一种变通的方法来解决这个问题,像这样:

self.assertEqual(person.age, 42, 'age incorrect: expected value {0} actual value {1}'.format(42, person.age))

不过我觉得不提供“msg”这个参数是最好的选择,因为这样生成的文本是:

first != equal

大多数(*)测试工具都会直接显示哪一行出错了,所以你应该能明白是哪个测试失败了,以及为什么失败,而不需要额外的信息。

(*) 这里的“所有”意思是所有的工具。

撰写回答