python中的assertEquals与assertEqual


183

assertEqualsassertEqualpython 之间有区别unittest.TestCase吗?

如果没有,为什么会有两个功能?只是为了方便?

Answers:


208

好问题!

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

 # Synonyms for assertion methods
 assertEqual = assertEquals = failUnlessEqual

在您看来,在Python 3中failUnlessEqual已明确弃用。assertEquals带有此评论:-)

#断言方法的同义词

#没有复数形式。保持这种方式阻止使用。

#不要添加更多。不要删除。

#对它们进行弃用周期会使很多人感到烦恼。

因此,结果似乎是您应该对Python 2.x使用任何您喜欢的东西,而倾向于对assertEqualPython 3使用。


34
实际上,关于复数的评论是模棱两可的。它说“复数”是无证的。最后一句话表示您理解这是指以s开头的方法名称,例如assertEquals。但从语法上讲,equals是动词的单数(第三人称)形式,而不是复数形式。我认为您正确理解了注释作者的意思,但“复数”一词是错误的。
LarsH 2014年

45

3.3更新:从26.3.7.1.1开始。弃用的别名

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

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

24

不仅仅适用于Python 3.x,因为assertEquals不推荐使用python 2.7 :

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

25.3.7.1.1。弃用的别名


5

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

failIf(some_condition)

过度

assertFalse(some_condition)

但是喜欢

assertEqual(a, b)

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

“唯一的一种明显的方式”已经优先考虑了。



0

我知道它无法回答特定问题,但是如果您在搜索时到达此处:

using deprecated method assertEquals()

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


-1

几乎一样,只是assertEquals被限制了。建议使用assertEqual,如下所示:

# 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.


      assertEquals = assertEqual

在线来源:https : //github.com/python/cpython/blob/e42b705188271da108de42b55d9344642170aa2b/Lib/lib2to3/fixes/fix_asserts.py


1
从技术上讲,您是对的,但其中一个名称已被弃用,另一个名称则不被使用。链接的代码旨在将不推荐使用的名称重写为不推荐使用的名称。
Marius Gedminas,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.