assertEquals vs. assertEqual в python


184

Чи є різниця між пітоном assertEqualsі assertEqualв ньому unittest.TestCase?

А якщо немає, то чому існують дві функції? Тільки для зручності?

Відповіді:


209

Гарне питання!

Насправді в 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. І все-таки граматично рівне - це форма однини (3-ї особи) дієслова, а не множина. Я думаю, ви правильно зрозуміли, що означає автор коментарів, але слово "множина" помиляється.
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, а потім виконую "довідку (TestCase)", вона відображається в списку. Я думаю, що це просто синонім зручності.


10
Так, але це погано порушує мантру "єдиний очевидний спосіб зробити це" :-(.
Алекс Мартеллі

4
@Alex - Ви не отримаєте від мене жодних аргументів з цього приводу.
Фред Ларсон

0

Я знаю, що це не відповідає конкретному питанню, але якщо ви потрапили сюди під час пошуку:

using deprecated method assertEquals()

Вам просто потрібно змінити виклик на .assertEqual () (вилучити 's' в equS)


-1

Це майже те саме, за винятком того, що assrtEquals перевидається. Рекомендується використовувати asrtEqual, як тут:

# 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
Технічно ви маєте рацію, але одне з назв застаріле, а інше - ні. Код, який ви пов’язали, має на меті переписати застарілі імена на непридатні.
Маріус Гедмінас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.