assertEquals vs. assertEqual in Python


183

Gibt es einen Unterschied zwischen assertEqualsund assertEqualin der Python unittest.TestCase?

Und wenn nicht, warum gibt es zwei Funktionen? Nur zur Vereinfachung?

Antworten:


208

Gute Frage!

Tatsächlich sind in Python 2.6 beide assertEqualund assertEqualsConvenience-Aliase zu failUnlessEqual. Die Quelle erklärt sie folgendermaßen:

 # Synonyms for assertion methods
 assertEqual = assertEquals = failUnlessEqual

In Python 3 ist dies bis zu Ihrem Punkt failUnlessEqualausdrücklich veraltet. assertEqualsträgt diesen Kommentar :-)

# Synonyme für Assertionsmethoden

# Die Pluralformen sind nicht dokumentiert. Halten Sie sie so, um die Verwendung zu verhindern.

# Fügen Sie nicht mehr hinzu. Nicht entfernen.

# Ein Abwertungszyklus würde viele Menschen ärgern.

Das Ergebnis scheint also zu sein, dass Sie für Python 2.x alles verwenden sollten, was Sie möchten, aber assertEqualfür Python 3 tendieren .


34
Eigentlich ist der Kommentar zu Pluralformen mehrdeutig. Es heißt, "die Pluralisten" sind ohne Papiere. Ihr letzter Satz zeigt an, dass Sie verstehen, dass dies Methodennamen bedeutet, die mit 's' enden, wie z assertEquals. Grammatisch gesehen ist equals jedoch eine Singularform (3. Person) eines Verbs, kein Plural. Ich denke, Sie haben richtig verstanden, was der Kommentator meinte, aber das Wort "Plural" ist falsch.
LarsH

45

A 3.3 Update: Ab 26.3.7.1.1. Veraltete Aliase :

Aus historischen Gründen hatten einige der TestCase-Methoden einen oder mehrere Aliase, die jetzt veraltet sind. In der folgenden Tabelle sind die korrekten Namen mit ihren veralteten Aliasnamen aufgeführt:

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

24

Nicht nur für Python 3.x, da Python 2.7 assertEqualsebenfalls veraltet ist:

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

Ab 25.3.7.1.1. Veraltete Aliase


5

Ich denke, dies war eine Spannung zwischen dem "einzigen offensichtlichen Weg, dies zu tun" und dem "Alias, um den gesamten Code semantisch fließen zu lassen". Persönlich fand ich, dass ich gerne lese

failIf(some_condition)

Über

assertFalse(some_condition)

aber mochte

assertEqual(a, b)

über die anderen beiden ( assertEquals(a, b)stört meinen Sinn für Grammatik).

Der "einzige offensichtliche Weg, dies zu tun" hat in Zukunft Vorrang.



0

Ich weiß, dass es die spezifische Frage nicht beantwortet, aber wenn Sie bei der Suche hierher gekommen sind:

using deprecated method assertEquals()

Sie müssen nur den Aufruf in .assertEqual () ändern (entfernen Sie das 's' in gleich)


-1

Es ist fast dasselbe, außer dass assertEquals wiederholt wird. Es wird empfohlen, assertEqual wie hier zu verwenden:

# 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

Online-Quelle: https://github.com/python/cpython/blob/e42b705188271da108de42b55d9344642170aa2b/Lib/lib2to3/fixes/fix_asserts.py


1
Technisch gesehen haben Sie Recht, aber einer der Namen ist veraltet und der andere nicht. Der von Ihnen verknüpfte Code soll die veralteten Namen in nicht veraltete umschreiben.
Marius Gedminas
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.