assertEquals vs assertEqual en python


184

Y a-t-il une différence entre assertEqualset assertEqualdans le python unittest.TestCase?

Et s'il n'y en a pas, pourquoi y a-t-il deux fonctions? Seulement pour plus de commodité?

Réponses:


210

Bonne question!

En fait, dans Python 2.6, les deux assertEqualet assertEqualssont des alias pratiques pour failUnlessEqual. La source les déclare ainsi:

 # Synonyms for assertion methods
 assertEqual = assertEquals = failUnlessEqual

Dans Python 3 , à votre point, failUnlessEqualest explicitement obsolète. assertEqualsporte ce commentaire :-)

# Synonymes de méthodes d'assertion

# Les pluriels ne sont pas documentés. Gardez-les de cette façon pour décourager l'utilisation.

# N'ajoutez pas plus. Ne pas enlever.

# Passer par un cycle de dépréciation sur ces derniers serait ennuyeux de nombreuses personnes.

Donc, le résultat semble être que vous devriez utiliser ce que vous voulez pour Python 2.x, mais plutôt assertEqualpour Python 3.


34
En fait, le commentaire sur les pluriels est ambigu. Il dit que "les pluriels" ne sont pas documentés. Votre dernière phrase indique que vous comprenez que cela signifie des noms de méthodes se terminant par «s», comme assertEquals. Pourtant grammaticalement, equals est une forme singulière (à la troisième personne) d'un verbe, pas un pluriel. Je pense que vous avez bien compris ce que le commentateur voulait dire, mais le mot «pluriel» est erroné.
LarsH

45

Une mise à jour 3.3: à partir du 26.3.7.1.1. Alias ​​obsolètes :

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

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

24

Pas seulement pour Python 3.x, puisque Python 2.7 assertEqualsest également obsolète:

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

À partir du 25.3.7.1.1. Alias ​​obsolètes


5

Je pense que c'était une tension entre "la seule façon évidente de le faire" et "l'alias pour faire couler sémantiquement le code global". Personnellement, j'ai trouvé que j'aime lire

failIf(some_condition)

plus de

assertFalse(some_condition)

mais aimé

assertEqual(a, b)

sur les deux autres ( assertEquals(a, b)dérange mon sens de la grammaire).

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


3

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


10
Ouais, mais ça casse gravement le mantra "une seule façon évidente de le faire" :-(.
Alex Martelli

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

0

Je sais que cela ne répond pas à la question spécifique, mais si vous êtes arrivé ici en cherchant:

using deprecated method assertEquals()

Il vous suffit de changer l'appel à .assertEqual () (supprimer le 's' dans equalS)


-1

C'est presque la même chose sauf que assertEquals est reproduit. Il est recommandé d'utiliser assertEqual comme ici:

# 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

Source en ligne: https://github.com/python/cpython/blob/e42b705188271da108de42b55d9344642170aa2b/Lib/lib2to3/fixes/fix_asserts.py


1
Techniquement, vous avez raison, mais l'un des noms est obsolète et l'autre ne l'est pas. Le code que vous avez lié est destiné à réécrire les noms obsolètes en noms non obsolètes.
Marius Gedminas
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.