Python: unittest能显示预期值和实际值吗?
如果我在一个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
大多数(*)测试工具都会直接显示哪一行出错了,所以你应该能明白是哪个测试失败了,以及为什么失败,而不需要额外的信息。
(*) 这里的“所有”意思是所有的工具。