253 votes

assertEquals vs. assertEqual en python

Y a-t-il une différence entre assertEquals y assertEqual dans le python unittest.TestCase ?

Et si ce n'est pas le cas, pourquoi y a-t-il deux fonctions ? Seulement par commodité ?

290voto

Jarret Hardie Points 36266

En fait, dans Python 2.6, les deux options assertEqual y assertEquals sont des alias pratiques pour failUnlessEqual . La source les déclare ainsi :

# Synonyms for assertion methods
assertEqual = assertEquals = failUnlessEqual

Sur Python 3 à votre avis, failUnlessEqual est explicitement déprécié. assertEquals porte ce commentaire :-)

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

En conclusion, il semble que vous devez utiliser ce que vous voulez pour Python 2.x, mais tendez vers assertEqual pour Python 3.

52 votes

En fait, le commentaire sur le pluriel est ambigu. Il dit que "les pluriels" sont non documentés. Votre dernière phrase indique que vous comprenez que cela signifie les noms de méthodes se terminant par un 's', comme assertEquals . Pourtant, grammaticalement, est égal à est une forme singulière (3ème personne) d'un verbe, pas un pluriel. Je pense que vous avez compris correctement ce que l'auteur du commentaire voulait dire, mais le mot "pluriel" est erroné.

67voto

Matthew Cornell Points 734

Une mise à jour de la 3.3 : De 26.3.7.1.1. Alias dépréciés :

Pour des raisons historiques, certaines des méthodes TestCase avaient un ou plusieurs alias qui sont maintenant obsolètes. Le tableau suivant répertorie les noms corrects ainsi que leurs alias dépréciés :

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

35voto

chungnho Points 441

Pas seulement pour Python 3.x, depuis Python 2.7 assertEquals a également été déprécié :

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

Desde 25.3.7.1.1. Alias dépréciés

5voto

Kathy Van Stone Points 10310

Je pense que c'était une tension entre le "seul moyen évident de le faire" et "l'alias pour rendre le code global fluide sémantiquement". Personnellement, je trouve que j'aime lire

failIf(some_condition)

sur

assertFalse(some_condition)

mais j'ai aimé

assertEqual(a, b)

par rapport aux deux autres ( assertEquals(a, b) dérange mon sens de la grammaire).

La "seule façon évidente de le faire" a pris le pas sur l'avenir.

4voto

Fred Larson Points 27404

Je ne trouve aucune mention de assertEquals dans http://docs.python.org/library/unittest.html . Cependant, lorsque j'importe TestCase et que je fais un "help(TestCase)", il est répertorié. Je pense que c'est juste un synonyme de commodité.

10 votes

Oui, mais ça casse le mantra "il n'y a qu'une seule façon évidente de le faire" :-(.

4 votes

@Alex - Vous n'obtiendrez aucun argument de ma part à ce sujet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X