assertEquals so với assertEqual trong python


184

Có sự khác biệt giữa assertEqualsassertEqualtrong con trănunittest.TestCase ?

Và nếu không có, tại sao có hai chức năng? Chỉ để thuận tiện?

Câu trả lời:


209

Câu hỏi hay!

Trên thực tế, trong Python 2.6, cả hai assertEqualassertEqualsđều là bí danh tiện lợi failUnlessEqual. Nguồn khai báo chúng như vậy:

 # Synonyms for assertion methods
 assertEqual = assertEquals = failUnlessEqual

Trong Python 3 , theo quan điểm của bạn, failUnlessEqualrõ ràng không được chấp nhận. assertEqualsmang bình luận này :-)

# Từ đồng nghĩa với phương pháp khẳng định

# Số nhiều là không có giấy tờ. Giữ chúng theo cách đó để ngăn cản sử dụng.

# Không thêm nhiều hơn. Đừng loại bỏ.

# Trải qua một chu kỳ phản đối về những điều này sẽ gây khó chịu cho nhiều người.

Vì vậy, kết quả cuối cùng có vẻ là bạn nên sử dụng bất cứ thứ gì bạn thích cho Python 2.x, nhưng có xu hướng về assertEqualPython 3.


34
Trên thực tế các nhận xét về số nhiều là mơ hồ. Nó nói "số nhiều" là không có giấy tờ. Câu cuối cùng của bạn cho biết bạn hiểu điều này có nghĩa là tên phương thức kết thúc bằng 's', như assertEquals. Tuy nhiên, về mặt ngữ pháp, bằng là một dạng số ít (ngôi thứ 3) của một động từ, không phải là số nhiều. Tôi nghĩ bạn đã hiểu chính xác ý nghĩa của người viết bình luận, nhưng từ "số nhiều" bị nhầm lẫn.
LarsH

45

Bản cập nhật 3.3: Từ 26.3.7.1.1. Bí danh không dùng nữa :

Vì lý do lịch sử, một số phương thức TestCase có một hoặc nhiều bí danh hiện không được chấp nhận. Bảng sau liệt kê các tên chính xác cùng với các bí danh không dùng nữa:

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

24

Không chỉ dành cho Python 3.x, vì Python 2.7 assertEqualscũng không được dùng nữa:

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

Từ 25.3.7.1.1. Bí danh không dùng nữa


5

Tôi nghĩ rằng đây là sự căng thẳng giữa "chỉ một cách rõ ràng để làm điều đó" so với "bí danh để làm cho mã tổng thể chảy theo ngữ nghĩa". Cá nhân tôi thấy tôi thích đọc

failIf(some_condition)

kết thúc

assertFalse(some_condition)

nhưng thích

assertEqual(a, b)

hơn hai cái còn lại ( assertEquals(a, b)làm phiền ý thức ngữ pháp của tôi).

"Chỉ có một cách rõ ràng để làm điều đó" đã được ưu tiên trong tương lai.


3

Tôi không tìm thấy bất kỳ đề cập nào về assertEquals trong http://docs.python.org/l Library / unittest.html . Tuy nhiên, khi tôi nhập TestCase và sau đó thực hiện "trợ giúp (TestCase)", nó được liệt kê. Tôi nghĩ rằng đó chỉ là một từ đồng nghĩa cho thuận tiện.


10
Vâng, nhưng nó đã phá vỡ câu thần chú "chỉ có một cách rõ ràng để làm điều đó" :-(.
Alex Martelli

4
@Alex - Bạn sẽ không nhận được tranh luận từ tôi về điều đó.
Fred Larson

0

Tôi biết nó không trả lời câu hỏi cụ thể, nhưng nếu bạn đến đây trong khi tìm kiếm:

using deprecated method assertEquals()

Bạn chỉ cần thay đổi lệnh gọi thành .assertEqual () (xóa 's' bằng nhau)


-1

Nó gần như giống nhau ngoại trừ assertEquals bị giới hạn. Bạn nên sử dụng assertEqual như ở đây:

# 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

Nguồn trực tuyến: https://github.com/python/cpython/blob/e42b705188271da108de42b55d9344642170aa2b/Lib/lib2to3/fixes/fix_asserts.py


1
Về mặt kỹ thuật, bạn đúng, nhưng một trong những cái tên không được dùng nữa và cái còn lại thì không. Mã bạn liên kết có nghĩa là viết lại tên không dùng nữa thành tên không dùng nữa.
Marius Gedminas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.