ClaimEquals vs. afirmarEqual en Python


184

¿Hay alguna diferencia entre assertEqualsy assertEqualen la pitón?unittest.TestCase ?

Y si no lo hay, ¿por qué hay dos funciones? ¿Solo por conveniencia?

Respuestas:


210

¡Buena pregunta!

En realidad, en Python 2.6, tanto assertEqualy assertEqualsson los alias de conveniencia a failUnlessEqual. La fuente los declara así:

 # Synonyms for assertion methods
 assertEqual = assertEquals = failUnlessEqual

En Python 3 , hasta su punto, failUnlessEqualestá explícitamente en desuso. assertEqualslleva este comentario :-)

# Sinónimos para métodos de afirmación

# Los plurales no están documentados. Guárdelos de esa manera para desalentar el uso.

# No agregue más. No quitar.

# Pasar por un ciclo de desaprobación en estos molestaría a muchas personas.

Entonces, el resultado parece ser que debes usar lo que quieras para Python 2.x, pero tender a assertEqualPython 3.


34
En realidad, el comentario sobre los plurales es ambiguo. Dice que "los plurales" no están documentados. Su oración final indica que entiende que esto significa nombres de métodos que terminan en 's', como assertEquals. Sin embargo, gramaticalmente, igual es una forma singular (tercera persona) de un verbo, no un plural. Creo que entendiste correctamente lo que quiso decir el escritor de comentarios, pero la palabra 'plural' está equivocada.
LarsH

45

Una actualización 3.3: de 26.3.7.1.1. Alias ​​obsoletos :

Por razones históricas, algunos de los métodos TestCase tenían uno o más alias que ahora están en desuso. La siguiente tabla enumera los nombres correctos junto con sus alias obsoletos:

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

24

No solo para Python 3.x, ya que Python 2.7 también assertEqualsha quedado en desuso:

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

Desde 25.3.7.1.1. Alias ​​obsoletos


5

Creo que esto era tensión entre la "única forma obvia de hacerlo" frente a "alias para hacer que el código general fluya semánticamente". Personalmente encontré que me gusta leer

failIf(some_condition)

encima

assertFalse(some_condition)

pero me gustó

assertEqual(a, b)

sobre los otros dos ( assertEquals(a, b)molesta mi sentido de la gramática).

La "única forma obvia de hacerlo" ha tenido prioridad en el futuro.



0

Sé que no responde la pregunta específica, pero si llegaste aquí mientras buscabas:

using deprecated method assertEquals()

Solo necesita cambiar la llamada a .assertEqual () (elimine la 's' en equalS)


-1

Es casi lo mismo, excepto que afirmar Equals se repica. Se recomienda utilizar afirmarEqual como aquí:

# 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

Fuente en línea: https://github.com/python/cpython/blob/e42b705188271da108de42b55d9344642170aa2b/Lib/lib2to3/fixes/fix_asserts.py


1
Técnicamente tienes razón, pero uno de los nombres está en desuso y el otro no. El código que vinculó está destinado a reescribir los nombres obsoletos a los no obsoletos.
Marius Gedminas el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.