assertEquals и assertEqual в Python

184

Есть ли разница между assertEqualsи assertEqualв питоне unittest.TestCase?

А если нет, то почему две функции? Только для удобства?

Януш
источник

Ответы:

210

Хороший вопрос!

На самом деле, в Python 2.6 оба assertEqualи assertEqualsявляются псевдонимами удобства failUnlessEqual. Источник объявляет их так:

 # Synonyms for assertion methods
 assertEqual = assertEquals = failUnlessEqual

В Python 3 , на ваш взгляд, failUnlessEqualэто явно не рекомендуется. assertEqualsнесет этот комментарий :-)

# Синонимы для методов утверждения

# Множественное число не имеет документов. Держите их таким образом, чтобы препятствовать использованию.

# Не добавляйте больше. Не удаляйте.

# Проходя через цикл обесценивания на них будет раздражать многих людей.

В итоге получается, что вы должны использовать все, что вам нравится, для Python 2.x, но стремиться к assertEqualPython 3.

Джаррет Харди
источник
34
На самом деле комментарий о множественном числе неоднозначен. Там написано, что «множественное число» не имеет документов. Ваше последнее предложение означает, что вы понимаете, что это означает имена методов, заканчивающиеся на 's', например assertEquals. Тем не менее, грамматически, equals - это форма глагола в единственном числе (от третьего лица), а не множественное число. Я думаю, вы правильно поняли, что имел в виду автор комментариев, но слово «множественное число» ошибочно.
LarsH
45

А 3.3 обновление: с 26.3.7.1.1. Устаревшие псевдонимы :

По историческим причинам некоторые методы TestCase имели один или несколько псевдонимов, которые в настоящее время не рекомендуются. В следующей таблице перечислены правильные имена вместе с их устаревшими псевдонимами:

Method Name   | Deprecated alias | Deprecated alias
--------------+------------------+-----------------
assertEqual() | failUnlessEqual  | assertEquals
...
Мэтью Корнелл
источник
5

Я думаю, что это было противоречие между «единственным очевидным способом сделать это» и «псевдонимом для обеспечения семантического потока всего кода». Лично я нашел, что люблю читать

failIf(some_condition)

над

assertFalse(some_condition)

но понравилось

assertEqual(a, b)

над другими двумя ( assertEquals(a, b)мешает мое чувство грамматики).

«Единственный очевидный способ сделать это» имеет преимущество в будущем.

Кэти Ван Стоун
источник
3

Я не нахожу упоминания об assertEquals в http://docs.python.org/library/unittest.html . Однако, когда я импортирую TestCase, а затем выполняю «help (TestCase)», он появляется в списке. Я думаю, что это просто синоним для удобства.

Фред Ларсон
источник
10
Да, но это сильно нарушает мантру «единственный очевидный способ сделать это» :-(.
Алекс Мартелли
4
@ Алекс - Вы не получите от меня никаких аргументов по этому поводу.
Фред Ларсон
0

Я знаю, что это не отвечает на конкретный вопрос, но если вы попали сюда во время поиска:

using deprecated method assertEquals()

Вам просто нужно изменить вызов на .assertEqual () (убрать 's' в equalS)

mrmuggles
источник
-1

Это почти то же самое, за исключением того, что assertEquals переоценен. Рекомендуется использовать assertEqual как здесь:

# 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

Источник в Интернете: https://github.com/python/cpython/blob/e42b705188271da108de42b55d9344642170aa2b/Lib/lib2to3/fixes/fix_asserts.py

Рабхи салим
источник
1
Технически вы правы, но одно из имен устарело, а другое - нет. Код, который вы связали, предназначен для того, чтобы перезаписать устаревшие имена на устаревшие.
Мариус Гедминас