2009-05-31 10 views

risposta

138

Buona domanda!

In realtà, in Python 2.6, sia assertEqual sia assertEquals sono alias di convenienza per failUnlessEqual. La fonte li dichiara così:

# Synonyms for assertion methods 
assertEqual = assertEquals = failUnlessEqual 

In Python 3, al punto, failUnlessEqual è esplicitamente deprecato. assertEquals porta questo commento :-)

# Sinonimi per i metodi di asserzione

# I plurali sono privi di documenti. Tenerli in questo modo per scoraggiare l'uso.

# Non aggiungere altro. Non rimuovere.

# Passando attraverso un ciclo di deprecazione su questi sarebbe infastidire molte persone.

Quindi, il risultato sembra essere che si dovrebbe usare quello che vuoi per Python 2.x, ma tendono verso assertEqual per Python 3.

+17

In realtà il commento sui plurali è ambiguo, dice che "i plurali" non sono documentati, la frase finale indica che si intende che questo significhi nomi di metodi che terminano con "s", come "assertEquals". uguale a * è una forma singolare (in terza persona) di un verbo, non un plurale. Penso che tu abbia capito correttamente cosa intendesse il comment-writer, ma la parola "plurale" è sbagliata. – LarsH

2

Non trovo alcuna menzione di assertEquals in http://docs.python.org/library/unittest.html. Tuttavia, quando importare TestCase e quindi fare un "aiuto (TestCase)", è elencato. Penso che sia solo un sinonimo di convenienza.

+8

Sì, ma rompe male il "solo un modo ovvio per farlo" mantra :-( –

+3

@alex - Avrai senza argomento da parte mia su questo –

4

Credo che questo era tensione tra il "solo modo ovvio per farlo "vs" alias per rendere semantico il flusso del codice complessivo ". Personalmente ho trovato mi piace leggere

failIf(some_condition) 

oltre

assertFalse(some_condition) 

ma piaceva

assertEqual(a, b) 

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

"L'unico modo ovvio per farlo" ha avuto la precedenza in futuro.

24

A 3.3 update: Da 26.3.7.1.1. Deprecated aliases:

Per ragioni storiche, alcuni dei metodi TestCase avevano uno o più alias che ora sono obsoleti. Nella tabella seguente sono elencati i nomi corretti con i loro pseudonimi deprecate:

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

Non solo per Python 3.x, dal momento che Python 2.7 assertEquals è stato deprecato così:.

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

Da 25.3.7.1.1. Deprecated aliases