2009-05-31 17 views

Respuesta

138

¡Buena pregunta!

En realidad, en Python 2.6, ambos assertEqual y assertEquals son alias de conveniencia para failUnlessEqual. La fuente de las declara así:

# Synonyms for assertion methods 
assertEqual = assertEquals = failUnlessEqual 

En Python 3, a su punto, failUnlessEqual es obsoleto de forma explícita. assertEquals lleva este comentario :-)

# sinónimos para los métodos de aseveración

# Los plurales son indocumentados. 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.

Por lo tanto, el resultado final parece ser que se debe utilizar lo que quiera para Python 2.x, pero tienden hacia assertEqual para Python 3.

+17

En realidad, el comentario sobre los plurales es ambiguo. Dice que "los plurales" no están documentados. Su última oración indica que entiende que los nombres de los métodos terminan con "s", como "assertEquals". Sin embargo, gramaticalmente, * equals * es una forma singular (tercera persona) de un verbo, no un plural. Creo que entendiste correctamente lo que quería decir el escritor de comentarios, pero la palabra 'plural' está equivocada. – LarsH

2

No encuentro ninguna mención de assertEquals 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.

+8

Sí, pero es mal rompe "la única manera obvia de hacerlo" mantra :-( –

+3

@Alex - Usted obtendrá ningún argumento de mí sobre eso. –

4

Creo que esta fue la tensión entre el "sólo una manera obvia hacerlo "alias" para hacer que el código general fluya semánticamente ". Personalmente, me pareció que me gusta leer

failIf(some_condition) 

sobre

assertFalse(some_condition) 

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

24

Una actualización 3.3: De 26.3.7.1.1. Deprecated aliases:

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

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

No sólo para Python 3.x, ya que Python 2.7 assertEquals ya no se utiliza, así:.

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

De 25.3.7.1.1. Deprecated aliases