assertEquals vs. assertEqual ใน python


184

มีความแตกต่างระหว่างassertEqualsและassertEqualในหลามunittest.TestCaseหรือไม่

และถ้าไม่มีทำไมถึงมีสองฟังก์ชั่น? เพื่อความสะดวกเท่านั้น?

คำตอบ:


209

คำถามที่ดี!

อันที่จริงในหลาม 2.6 ทั้งสองassertEqualและมีความสะดวกสบายให้กับนามแฝงassertEquals failUnlessEqualแหล่งที่มาประกาศพวกเขาดังนี้:

 # Synonyms for assertion methods
 assertEqual = assertEquals = failUnlessEqual

ในPython 3จนถึงจุดของคุณfailUnlessEqualจะถูกคัดค้านอย่างชัดเจน assertEqualsดำเนินการแสดงความคิดเห็นนี้ :-)

# คำพ้องสำหรับวิธีการยืนยัน

# พหูพจน์ไม่มีเอกสาร ให้พวกเขามีวิธีที่จะกีดกันการใช้งาน

# อย่าเพิ่มมากขึ้น อย่าลบ

# จะผ่านรอบคัดค้านเหล่านี้จะรบกวนคนจำนวนมาก

ดังนั้นผลที่สุดก็คือคุณควรใช้สิ่งที่คุณต้องการสำหรับ Python 2.x แต่มีแนวโน้มที่จะassertEqualเป็น Python 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 - คุณจะไม่ได้รับข้อโต้แย้งจากฉัน
Fred Larson

0

ฉันรู้ว่ามันไม่ได้ตอบคำถามเฉพาะ แต่ถ้าคุณมาที่นี่ในขณะที่ค้นหา:

using deprecated method assertEquals()

คุณเพียงแค่ต้องเปลี่ยนการโทรเป็น. assertEqual () (ลบ 's' ในเท่ากับ S)


-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/lib/lib2to3/fixes/fix_asserts.py


1
ในทางเทคนิคคุณพูดถูก แต่ไม่มีชื่อหนึ่งชื่อ รหัสที่คุณเชื่อมโยงนั้นมีวัตถุประสงค์เพื่อเขียนชื่อที่คัดค้านไปยังชื่อที่ไม่สนับสนุน
Marius Gedminas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.