assertEquals vs assertEqual dalam python


184

Apakah ada perbedaan antara assertEqualsdan assertEqualdalam python unittest.TestCase?

Dan jika tidak ada, mengapa ada dua fungsi? Hanya untuk kenyamanan?

Jawaban:


210

Pertanyaan bagus!

Sebenarnya, di Python 2.6, baik assertEqualdan assertEqualsyang kenyamanan alias untuk failUnlessEqual. Sumber menyatakan demikian:

 # Synonyms for assertion methods
 assertEqual = assertEquals = failUnlessEqual

Dalam Python 3 , ke titik Anda, failUnlessEqualsecara eksplisit ditinggalkan. assertEqualsmembawa komentar ini :-)

# Sinonim untuk metode pernyataan

# Bentuk jamaknya tidak berdokumen. Buat mereka seperti itu untuk mencegah penggunaan.

# Jangan menambahkan lebih banyak. Jangan hapus.

# Mengalami siklus penghentian ini akan mengganggu banyak orang.

Jadi, hasilnya adalah Anda harus menggunakan apa pun yang Anda suka untuk Python 2.x, tetapi cenderung ke arah assertEqualuntuk Python 3.


34
Sebenarnya komentar tentang bentuk jamak adalah ambigu. Dikatakan "bentuk jamak" tidak berdokumen. Kalimat terakhir Anda menunjukkan bahwa Anda memahami ini berarti nama metode yang diakhiri dengan 's', seperti assertEquals. Namun secara tata bahasa, equal adalah bentuk tunggal (orang ketiga) dari kata kerja, bukan jamak. Saya pikir Anda mengerti dengan benar apa yang dimaksud dengan komentar-penulis, tetapi kata 'jamak' salah.
LarsH

45

Pembaruan 3.3: Dari 26.3.7.1.1. Alias ​​yang ditinggalkan :

Untuk alasan historis, beberapa metode TestCase memiliki satu atau lebih alias yang sekarang tidak digunakan lagi. Tabel berikut mencantumkan nama yang benar bersama dengan alias yang sudah usang:

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


5

Saya pikir ini adalah ketegangan antara "hanya satu cara yang jelas untuk melakukannya" vs. "alias untuk membuat aliran kode keseluruhan secara semantik". Secara pribadi saya menemukan saya suka membaca

failIf(some_condition)

lebih

assertFalse(some_condition)

tapi suka

assertEqual(a, b)

atas dua lainnya ( assertEquals(a, b)mengganggu rasa tata bahasa saya).

"Satu-satunya cara yang jelas untuk melakukannya" lebih diutamakan.


3

Saya tidak menemukan penyebutan assertEquals di http://docs.python.org/library/unittest.html . Namun, ketika saya mengimpor TestCase dan kemudian melakukan "bantuan (TestCase)", itu terdaftar. Saya pikir itu hanya sinonim untuk kenyamanan.


10
Ya, tapi itu sangat merusak mantra "satu-satunya cara yang jelas untuk melakukannya" :-(.
Alex Martelli

4
@ Alex - Anda tidak akan mendapatkan argumen dari saya tentang itu.
Fred Larson

0

Saya tahu itu tidak menjawab pertanyaan spesifik, tetapi jika Anda tiba di sini saat mencari:

using deprecated method assertEquals()

Anda hanya perlu mengubah panggilan menjadi .assertEqual () (hapus 's' in equalS)


-1

Ini hampir sama kecuali bahwa assertEquals di repricated. Dianjurkan untuk menggunakan assertEqual seperti di sini:

# 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

Sumber daring: https://github.com/python/cpython/blob/e42b705188271da108de42b55d9344642170aa2b/Lib/lib2to3/fixes/fix_asserts.py


1
Secara teknis Anda benar, tetapi salah satu nama sudah usang dan yang lainnya tidak. Kode yang Anda tautkan dimaksudkan untuk menulis ulang nama-nama yang sudah usang ke yang tidak-usang.
Marius Gedminas
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.