assertEquals vs. assertEqual w pythonie


184

Czy istnieje różnica pomiędzy assertEqualsoraz assertEqualw Pythonie unittest.TestCase?

A jeśli nie, to dlaczego są dwie funkcje? Tylko dla wygody?

Odpowiedzi:


209

Dobre pytanie!

Faktycznie, w Pythonie 2.6, zarówno assertEquali assertEqualssą aliasy wygodę failUnlessEqual. Źródło deklaruje je w ten sposób:

 # Synonyms for assertion methods
 assertEqual = assertEquals = failUnlessEqual

W Pythonie 3 , do tego stopnia, failUnlessEqualjest wyraźnie przestarzałe. assertEqualsprzenosi ten komentarz :-)

# Synonimy dla metod asercji

# Liczba mnoga jest nieudokumentowana. Trzymaj je w ten sposób, aby zniechęcić do korzystania.

# Nie dodawaj więcej. Nie usuwać.

# Przechodzenie przez cykl amortyzacji na nich denerwuje wiele osób.

Wydaje się więc, że powinieneś używać, co chcesz w Pythonie 2.x, ale dążyć do assertEqualPythona 3.


34
W rzeczywistości komentarz na temat liczby mnogiej jest niejednoznaczny. Mówi, że „liczba mnoga” jest nieudokumentowana. Ostatnie zdanie wskazuje, że rozumiesz to jako nazwę metody kończącą się na „s”, na przykład assertEquals. Jednak gramatycznie równość jest formą czasownika w liczbie pojedynczej (3 osoby), a nie w liczbie mnogiej. Myślę, że dobrze zrozumiałeś, co miał na myśli komentator, ale słowo „liczba mnoga” jest błędne.
LarsH

45

Aktualizacja 3.3: Od 26.3.7.1.1. Przestarzałe aliasy :

Ze względów historycznych niektóre metody TestCase miały jeden lub więcej aliasów, które są już nieaktualne. W poniższej tabeli wymieniono prawidłowe nazwy wraz z nieaktualnymi aliasami:

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

24

Nie tylko dla Python 3.x, ponieważ Python 2.7 assertEqualsrównież jest przestarzały:

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

Od 25.3.7.1.1. Przestarzałe aliasy


5

Myślę, że to napięcie między „jedynym oczywistym sposobem na zrobienie tego” a „aliasem, aby cały kod płynął semantycznie”. Osobiście uważam, że lubię czytać

failIf(some_condition)

nad

assertFalse(some_condition)

ale lubiłem

assertEqual(a, b)

nad pozostałymi dwoma ( assertEquals(a, b)przeszkadza mi poczucie gramatyki).

„Tylko jeden oczywisty sposób na zrobienie tego” ma pierwszeństwo w przyszłości.



0

Wiem, że nie odpowiada na konkretne pytanie, ale jeśli dotarłeś tutaj podczas wyszukiwania:

using deprecated method assertEquals()

Musisz tylko zmienić wywołanie na .assertEqual () (usuń „s” w równości)


-1

Jest prawie tak samo, z wyjątkiem tego, że assertEquals jest powtórzone. Zalecane jest użycie assertEqual jak tutaj:

# 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

Źródło online: https://github.com/python/cpython/blob/e42b705188271da108de42b55d9344642170aa2b/Lib/lib2to3/fixes/fix_asserts.py


1
Technicznie rzecz biorąc masz rację, ale jedno z nich jest przestarzałe, a drugie nie. Kod, który podłączyłeś, ma na celu przepisanie nieaktualnych nazw na nieaktualne.
Marius Gedminas
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.