Gibt es einen Unterschied zw assertEquals
und assertEqual
in der Python unittest.TestCase
?
Und wenn nicht, warum gibt es dann zwei Funktionen? Nur aus Bequemlichkeit?
Janusz
Gibt es einen Unterschied zw assertEquals
und assertEqual
in der Python unittest.TestCase
?
Und wenn nicht, warum gibt es dann zwei Funktionen? Nur aus Bequemlichkeit?
Jarret Hardie
Eigentlich in Python 2.6 beides assertEqual
und assertEquals
sind Convenience-Aliase für failUnlessEqual
. Die Quelle erklärt sie so:
# Synonyms for assertion methods
assertEqual = assertEquals = failUnlessEqual
Im Python 3zu deinem Punkt, failUnlessEqual
wird ausdrücklich abgelehnt. assertEquals
trägt diesen Kommentar 🙂
# 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.
Das Ergebnis scheint also zu sein, dass Sie für Python 2.x verwenden sollten, was Sie möchten, aber eher dazu neigen assertEqual
für Python3.
Eigentlich ist der Kommentar zum Plural mehrdeutig. Es heißt, “die Pluralformen” sind undokumentiert. Ihr letzter Satz weist darauf hin, dass Sie darunter Methodennamen verstehen, die mit „s“ enden, wie z assertEquals
. Doch grammatikalisch gleich ist eine Singularform (3. Person) eines Verbs, kein Plural. Ich denke, Sie haben richtig verstanden, was der Kommentarschreiber gemeint hat, aber das Wort “Plural” ist falsch.
– LarsH
25. August 2014 um 16:12 Uhr
Matthäus Cornell
Ein 3.3-Update: Von 26.3.7.1.1. Veraltete Aliase :
Aus historischen Gründen hatten einige der TestCase-Methoden einen oder mehrere Aliase, die jetzt veraltet sind. Die folgende Tabelle listet die korrekten Namen zusammen mit ihren veralteten Aliasen auf:
Method Name | Deprecated alias | Deprecated alias
--------------+------------------+-----------------
assertEqual() | failUnlessEqual | assertEquals
...
Nicht nur für Python 3.x, seit Python 2.7 assertEquals
wurde ebenfalls verworfen:
Method Name | Deprecated alias(es)
_________________________________________________________
assertEqual() | failUnlessEqual, assertEquals
Ich denke, das war eine Spannung zwischen dem “nur einen offensichtlichen Weg, es zu tun” und “Alias, um den gesamten Code semantisch fließen zu lassen”. Ich persönlich fand, dass ich gerne lese
failIf(some_condition)
Über
assertFalse(some_condition)
aber gefallen
assertEqual(a, b)
über die anderen beiden (assertEquals(a, b)
stört mein Grammatikgefühl).
Der „einzige offensichtliche Weg, dies zu tun“ hat in Zukunft Vorrang.
Ich finde keine Erwähnung von assertEquals in http://docs.python.org/library/unittest.html. Wenn ich jedoch TestCase importiere und dann eine “Hilfe (TestCase)” mache, wird es aufgelistet. Ich denke, es ist nur ein Synonym für Bequemlichkeit.
Ja, aber es bricht das Mantra “nur ein offensichtlicher Weg, es zu tun” :-(.
– Alex Martelli
31. Mai 2009 um 1:35 Uhr
@Alex – Du wirst kein Argument von mir dazu bekommen.
– Fred Larson
31. Mai 2009 um 1:47 Uhr
mrmuggles
Ich weiß, dass es die spezifische Frage nicht beantwortet, aber wenn Sie hierher gekommen sind, während Sie nach gesucht haben:
using deprecated method assertEquals()
Sie müssen nur den Aufruf in .assertEqual() ändern (entfernen Sie das ‘s’ in equalS)
Ja, aber es bricht das Mantra “nur ein offensichtlicher Weg, es zu tun” :-(.
– Alex Martelli
31. Mai 2009 um 1:35 Uhr
@Alex – Du wirst kein Argument von mir dazu bekommen.
– Fred Larson
31. Mai 2009 um 1:47 Uhr