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?

Janusz
quelle

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 .

Jarret Hardie
quelle
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
...
Matthew Cornell
quelle
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

Chungnho
quelle
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.

Kathy Van Stone
quelle
3

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)" ausführe, wird diese aufgelistet. Ich denke, es ist nur ein Synonym für Bequemlichkeit.

Fred Larson
quelle
10
Ja, aber es bricht schlecht das Mantra "nur ein offensichtlicher Weg, es zu tun" :-(.
Alex Martelli
4
@ Alex - Du wirst kein Argument von mir bekommen.
Fred Larson
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)

mrmuggles
quelle
-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

Rabhi Salim
quelle
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