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é?

Janusz
la source

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.

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

chungnho
la source
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.

Kathy Van Stone
la source
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é.

Fred Larson
la source
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)

mrmuggles
la source
-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

Rabhi salim
la source
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