assertEquals vs. assertEqual in Python

Lesezeit: 2 Minuten

Benutzer-Avatar
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?

Benutzer-Avatar
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


Benutzer-Avatar
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

Aus 25.3.7.1.1. Veraltete Aliase

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

Benutzer-Avatar
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

1054210cookie-checkassertEquals vs. assertEqual in Python

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy