【问题标题】:assertEquals vs. assertEqual in pythonpython中的assertEquals与assertEqual
【发布时间】:2010-10-30 04:21:22
【问题描述】:

pythonunittest.TestCase中的assertEqualsassertEqual有区别吗?

如果没有,为什么有两个函数?只是为了方便?

【问题讨论】:

    标签: python unit-testing


    【解决方案1】:

    实际上,在 Python 2.6 中,assertEqualassertEquals 都是 failUnlessEqual 的方便别名。来源这样声明它们:

    # Synonyms for assertion methods
    assertEqual = assertEquals = failUnlessEqual
    

    Python 3 中,就您而言,failUnlessEqual 已被明确弃用。 assertEquals 带有此评论:-)

    # Synonyms for assertion methods
    # The plurals are undocumented.  Keep them that way to discourage use.
    # Do not add more.  Do not remove.
    # Going through a deprecation cycle on these would annoy many people.
    

    因此,结果似乎是您应该在 Python 2.x 中使用任何您喜欢的东西,但在 Python 3 中倾向于使用assertEqual

    【讨论】:

    • 其实关于复数的评论是模棱两可的。它说“复数”是无证的。您的最后一句话表明您理解这意味着以“s”结尾的方法名称,例如assertEquals。然而在语法上,equals 是动词的单数(第三人称)形式,而不是复数形式。我认为您正确理解了评论作者的意思,但是“复数”这个词是错误的。
    【解决方案2】:

    我知道它没有回答具体问题,但如果您在搜索时来到这里:

    using deprecated method assertEquals()
    

    您只需将调用更改为 .assertEqual()(删除 equalS 中的 's')

    【讨论】:

      【解决方案3】:

      不仅适用于 Python 3.x,因为 Python 2.7 assertEquals 也已被弃用:

      Method Name            | Deprecated alias(es)
      _________________________________________________________
      assertEqual()          | failUnlessEqual, assertEquals
      

      来自25.3.7.1.1. Deprecated aliases

      【讨论】:

        【解决方案4】:

        3.3 更新:来自26.3.7.1.1. Deprecated aliases

        由于历史原因,某些 TestCase 方法有一个或多个别名,现在已弃用。下表列出了正确的名称及其已弃用的别名:

        Method Name   | Deprecated alias | Deprecated alias
        --------------+------------------+-----------------
        assertEqual() | failUnlessEqual  | assertEquals
        ...
        

        【讨论】:

          【解决方案5】:

          我认为这是“唯一一种明显的方法”与“使整体代码在语义上流动的别名”之间的紧张关系。我个人发现我喜欢阅读

          failIf(some_condition)
          

          结束

          assertFalse(some_condition)
          

          但喜欢

          assertEqual(a, b)
          

          超过其他两个(assertEquals(a, b) 打扰了我的语法意识)。

          “只有一种明显的方式来做到这一点”在未来占据了优先地位。

          【讨论】:

            【解决方案6】:

            我在http://docs.python.org/library/unittest.html 中没有发现任何关于 assertEquals 的内容。但是,当我导入 TestCase 然后执行“帮助(TestCase)”时,它会被列出。我认为这只是方便的同义词。

            【讨论】:

            • 是的,但它严重违反了“唯一一种明显的方法”的口头禅:-(.
            • @Alex - 你不会从我这里得到任何论据。
            猜你喜欢
            • 2016-04-16
            • 2020-05-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-03
            • 2015-10-22
            • 1970-01-01
            • 2013-07-20
            相关资源
            最近更新 更多