【发布时间】:2018-01-11 21:58:19
【问题描述】:
在 Python 的unittest 模块中,在以下情况下使用assertTrue() 与assertEqual() 有什么优缺点?
self.assertTrue(a == b)
self.assertEqual(a, b)
【问题讨论】:
标签: python unit-testing python-unittest
在 Python 的unittest 模块中,在以下情况下使用assertTrue() 与assertEqual() 有什么优缺点?
self.assertTrue(a == b)
self.assertEqual(a, b)
【问题讨论】:
标签: python unit-testing python-unittest
始终使用assertEqual(),因为它自定义失败输出。
如果两个参数的类型匹配并且注册了特定于类型的辅助方法,该方法将委托给各种辅助方法,以向您展示,例如,两个字符串或两个列表在断言失败时如何不同。
assertTrue() 只能告诉你断言失败,而不是告诉你原因。
来自assertEqual() documentation:
此外,如果 first 和 second 是完全相同的类型,并且是
list、tuple、dict、set、@987654330 之一@ 或str或子类使用addTypeEqualityFunc()注册的任何类型将调用特定于类型的相等函数,以生成更有用的默认错误消息(另请参阅 list of type-specific methods)。
只有在没有更具体的断言可用时才使用assertTrue()。
【讨论】:
如果您想检查 True 以外的值,请选择 assertEqual 以获取有意义的错误消息。我认为它也更具可读性,因为您定义了与您要检查的值相比的预期部分。
如果您想检查真正的布尔结果,例如 assertTrue(user.hasAdminRole()),请选择 assertTrue 而不是 assertEqual
【讨论】:
assertTrue() 的重点是对表达式的真值进行断言。该问题特别适用于== 平等测试。