Python:unittest能否显示预期值和实际值?
如果我在unittest.TestCase中有一个断言,如下所示:Python:unittest能否显示预期值和实际值?,python,unit-testing,Python,Unit Testing,如果我在unittest.TestCase中有一个断言,如下所示: self.assertTrue( person.age == 42, "age incorrect") 当它失败时,它会给出“年龄不正确”的消息。我还想看到的是预期值和实际值。做这件事最好的方法是什么?这是unittest可以做的吗 编辑 我想看看这样的东西: “年龄不正确:预期值42实际值39”请参见: 或使用默认消息(回答评论): 您应该使用解决此问题的方法,如下所示: self.assertEqual(person.ag
self.assertTrue( person.age == 42, "age incorrect")
当它失败时,它会给出“年龄不正确”的消息。我还想看到的是预期值和实际值。做这件事最好的方法是什么?这是unittest可以做的吗
编辑
我想看看这样的东西:
“年龄不正确:预期值42实际值39”请参见:
或使用默认消息(回答评论):
您应该使用解决此问题的方法,如下所示:
self.assertEqual(person.age, 42, 'age incorrect: expected value {0} actual value {1}'.format(42, person.age))
但我认为不提供“msg”参数是最好的选择,因为它会生成文本:
first != equal
大多数用于运行测试的(*)工具也直接显示哪一行失败,因此您应该能够理解哪一个测试失败以及为什么失败,而无需使用额外的消息
(*)读取“全部”。您可以将
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
引用:
self.assert
是一个语法错误。你是说self.assert.
。谢谢。是的,我想写assertTrue…更新。这对我不起作用。它仍然打印出“年龄不正确”,但不是实际值,即person.age.thank的值。我没有意识到不添加消息会给出实际值和预期值。这违反了原则。@Bakuriu直接显示哪一行失败并不意味着您能够知道预期值和实际值,特别是当测试失败时。显示msg参数和断言值并不难。不需要写两次值。只需将TestCase
实例的longMessage
属性设置为True
@Bakuriu问题是如何同时显示错误消息和断言值。(参见问题的最后一句。)另外,我认为显示错误消息是让用户了解情况的直观方式。它和断言值一样重要。此外,正如我所提到的,有一个非常简单的方法来实现这一点。一个有效的答案并不是一个好的答案,当然@Rockallite可以决定它需要多差才能投否决票。我个人不会投反对票,但这确实让我皱眉。这正是我认为应该存在的。回答得很好!
expected_age = 42
actual_age = person.age # 39
self.longMessage = True
self.assertEqual(expected_age, actual_age, 'age incorrect')
AssertionError: 42 != 39 : age incorrect