assertEquals vs. assertEqual in python


184

C'è una differenza tra assertEqualse assertEqualnel pitone unittest.TestCase?

E se non c'è, perché ci sono due funzioni? Solo per comodità?

Risposte:


210

Buona domanda!

In realtà, in Python 2.6, entrambi assertEquale assertEqualssono alias di convenienza failUnlessEqual. La fonte li dichiara così:

 # Synonyms for assertion methods
 assertEqual = assertEquals = failUnlessEqual

In Python 3 , a tuo punto, failUnlessEqualè esplicitamente deprecato. assertEqualsporta questo commento :-)

# Sinonimi per metodi di asserzione

# I plurali non sono documentati. Tienili così per scoraggiare l'uso.

# Non aggiungere altro. Non rimuovere.

# Passare attraverso un ciclo di deprecazione su questi infastidirebbe molte persone.

Quindi, il risultato sembra essere che dovresti usare quello che ti piace per Python 2.x, ma tendi verso assertEqualPython 3.


34
In realtà il commento sui plurali è ambiguo. Dice che "i plurali" sono privi di documenti. La tua frase finale indica che capisci che significa nomi di metodi che terminano con 's', come assertEquals. Eppure grammaticalmente, eguaglia è una singolare (terza persona) forma di un verbo, non un plurale. Penso che tu abbia capito bene cosa significasse il commentatore, ma la parola "plurale" è sbagliata.
LarsH,

45

Un aggiornamento 3.3: dal 26.3.7.1.1. Alias ​​obsoleti :

Per motivi storici, alcuni dei metodi TestCase avevano uno o più alias che ora sono deprecati. La tabella seguente elenca i nomi corretti insieme ai loro alias deprecati:

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

24

Non solo per Python 3.x, poiché anche Python 2.7 assertEqualsè stato deprecato:

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

Dal 25.3.7.1.1. Alias ​​obsoleti


5

Penso che questa sia stata la tensione tra "l'unico modo ovvio per farlo" vs "alias per far fluire semanticamente il codice complessivo". Personalmente ho scoperto che mi piace leggere

failIf(some_condition)

al di sopra di

assertFalse(some_condition)

ma mi è piaciuto

assertEqual(a, b)

rispetto agli altri due ( assertEquals(a, b)disturba il mio senso della grammatica).

L'unico "modo ovvio per farlo" ha avuto la precedenza andando avanti.



0

So che non risponde alla domanda specifica, ma se sei arrivato qui durante la ricerca di:

using deprecated method assertEquals()

Devi solo cambiare la chiamata in .assertEqual () (rimuovi la 's' in equalS)


-1

È quasi lo stesso, tranne che assertEquals è ripreso. Si consiglia di utilizzare assertEqual come qui:

# 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

Fonte online: https://github.com/python/cpython/blob/e42b705188271da108de42b55d9344642170aa2b/Lib/lib2to3/fixes/fix_asserts.py


1
Tecnicamente hai ragione, ma uno dei nomi è deprecato e l'altro no. Il codice collegato ha lo scopo di riscrivere i nomi deprecati in nomi non deprecati.
Marius Gedminas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.