【问题标题】:Using assertTrue(==) vs assertEqual in unittest在单元测试中使用 assertTrue(==) 与 assertEqual
【发布时间】:2018-01-11 21:58:19
【问题描述】:

在 Python 的unittest 模块中,在以下情况下使用assertTrue()assertEqual() 有什么优缺点?

self.assertTrue(a == b)
self.assertEqual(a, b)

【问题讨论】:

    标签: python unit-testing python-unittest


    【解决方案1】:

    始终使用assertEqual(),因为它自定义失败输出

    如果两个参数的类型匹配并且注册了特定于类型的辅助方法,该方法将委托给各种辅助方法,以向您展示,例如,两个字符串或两个列表在断言失败时如何不同。

    assertTrue() 只能告诉你断言失败,而不是告诉你原因。

    来自assertEqual() documentation

    此外,如果 firstsecond 是完全相同的类型,并且是listtupledictset、@987654330 之一@ 或 str 或子类使用 addTypeEqualityFunc() 注册的任何类型将调用特定于类型的相等函数,以生成更有用的默认错误消息(另请参阅 list of type-specific methods)。

    只有在没有更具体的断言可用时才使用assertTrue()

    【讨论】:

      【解决方案2】:

      如果您想检查 True 以外的值,请选择 assertEqual 以获取有意义的错误消息。我认为它也更具可读性,因为您定义了与您要检查的值相比的预期部分。

      如果您想检查真正的布尔结果,例如 assertTrue(user.hasAdminRole()),请选择 assertTrue 而不是 assertEqual

      【讨论】:

      • 这不是被问到的。是的,assertTrue() 的重点是对表达式的真值进行断言。该问题特别适用于== 平等测试。
      • 对于 hasAdminRole 示例,您可能希望使用 assertIs(True, xxx),而不是 assertTrue。否则 user.hasAdminRole 可能会返回 37 并通过,这可能不是您想要的。见stackoverflow.com/questions/62117162/…
      猜你喜欢
      • 1970-01-01
      • 2018-04-11
      • 1970-01-01
      • 2012-07-17
      • 1970-01-01
      • 2013-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多