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?

Janusz
fuente

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.

Jarret Hardie
fuente
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
...
Matthew Cornell
fuente
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

Chungnho
fuente
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.

Kathy Van Stone
fuente
3

No encuentro ninguna mención de afirmarEquals en http://docs.python.org/library/unittest.html . Sin embargo, cuando importo TestCase y luego hago una "ayuda (TestCase)", aparece en la lista. Creo que es solo un sinónimo de conveniencia.

Fred Larson
fuente
10
Sí, pero rompe gravemente el mantra de "la única forma obvia de hacerlo" :-(.
Alex Martelli
44
@ Alex - No tendrás argumentos de mi parte sobre eso.
Fred Larson
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)

mrmuggles
fuente
-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

Rabhi salim
fuente
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