【发布时间】:2010-10-30 04:21:22
【问题描述】:
pythonunittest.TestCase中的assertEquals和assertEqual有区别吗?
如果没有,为什么有两个函数?只是为了方便?
【问题讨论】:
标签: python unit-testing
pythonunittest.TestCase中的assertEquals和assertEqual有区别吗?
如果没有,为什么有两个函数?只是为了方便?
【问题讨论】:
标签: python unit-testing
实际上,在 Python 2.6 中,assertEqual 和 assertEquals 都是 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。
【讨论】:
assertEquals。然而在语法上,equals 是动词的单数(第三人称)形式,而不是复数形式。我认为您正确理解了评论作者的意思,但是“复数”这个词是错误的。
我知道它没有回答具体问题,但如果您在搜索时来到这里:
using deprecated method assertEquals()
您只需将调用更改为 .assertEqual()(删除 equalS 中的 's')
【讨论】:
不仅适用于 Python 3.x,因为 Python 2.7 assertEquals 也已被弃用:
Method Name | Deprecated alias(es)
_________________________________________________________
assertEqual() | failUnlessEqual, assertEquals
【讨论】:
3.3 更新:来自26.3.7.1.1. Deprecated aliases:
由于历史原因,某些 TestCase 方法有一个或多个别名,现在已弃用。下表列出了正确的名称及其已弃用的别名:
Method Name | Deprecated alias | Deprecated alias
--------------+------------------+-----------------
assertEqual() | failUnlessEqual | assertEquals
...
【讨论】:
我认为这是“唯一一种明显的方法”与“使整体代码在语义上流动的别名”之间的紧张关系。我个人发现我喜欢阅读
failIf(some_condition)
结束
assertFalse(some_condition)
但喜欢
assertEqual(a, b)
超过其他两个(assertEquals(a, b) 打扰了我的语法意识)。
“只有一种明显的方式来做到这一点”在未来占据了优先地位。
【讨论】:
我在http://docs.python.org/library/unittest.html 中没有发现任何关于 assertEquals 的内容。但是,当我导入 TestCase 然后执行“帮助(TestCase)”时,它会被列出。我认为这只是方便的同义词。
【讨论】: