PythonでのassertEqualsとassertEqual


184

Python assertEqualsassertEqualには違いがありunittest.TestCaseますか?

ない場合、なぜ2つの関数があるのですか?便宜のためだけ?

回答:


210

良い質問!

実際、Python 2.6では、assertEqualassertEqualsはの便利なエイリアスfailUnlessEqualです。ソースはそれらをこうして宣言します:

 # Synonyms for assertion methods
 assertEqual = assertEquals = failUnlessEqual

ではPythonの3、あなたのポイントに、failUnlessEqual明示的に廃止されました。assertEqualsこのコメントを運ぶ:-)

#アサーションメソッドの同義語

#複数形は文書化されていません。使用をやめさせるためにそれらをそのようにしてください。

#追加しないでください。外さないでください。

#これらの非推奨サイクルを通過すると、多くの人々を困らせるでしょう。

つまり、Python 2.xでは好きなように使用する必要がありますがassertEqual、Python 3では傾向があるようです。


34
実際、複数形についてのコメントがあいまいです。「複数形」は文書化されていないという。最後の文は、これが「s」で終わるメソッド名を意味することを理解していることを示していますassertEquals。文法的にequalsは単数形(3人称)の動詞であり、複数形ではありません。コメントライターの意味は正しく理解できたと思いますが、「複数」という言葉は間違っています。
LarsH 2014

45

3.3の更新:26.3.7.1.1から非推奨のエイリアス

歴史的な理由により、一部のTestCaseメソッドには、現在廃止されている1つ以上のエイリアスがありました。次の表に、非推奨のエイリアスとともに正しい名前を示します。

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


5

これは、「それを行う唯一の明白な方法」と「全体的なコードフローを意味的にするエイリアス」の間の緊張であったと思います。個人的に私は読むのが好きだと思った

failIf(some_condition)

以上

assertFalse(some_condition)

しかし好きだった

assertEqual(a, b)

他の2 assertEquals(a, b)つよりも(私の文法の感覚を悩ます)。

「それを行う唯一の明白な方法」は、今後優先されます。


3

http://docs.python.org/library/unittest.htmlでassertEqualsについての言及はありません。しかし、TestCaseをインポートして「help(TestCase)」を実行すると、リストに表示されます。便宜上、同義語だと思います。


10
ええ、しかしそれは「それを行う唯一の明白な方法」のマントラをひどく壊します:
Alex Martelli

4
@アレックス-あなたはそれについて私から議論を得ることはありません。
フレッドラーソン、

0

特定の質問には答えられないことはわかっていますが、検索中にここにアクセスした場合は、次のようになります。

using deprecated method assertEquals()

呼び出しを.assertEqual()に変更するだけです(equalsSの「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/lib2to3/fixes/fix_asserts.py


1
技術的には正しいですが、名前の1つは廃止予定で、もう1つは廃止予定です。リンクしたコードは、非推奨の名前を非推奨でない名前に書き換えることを目的としています。
Marius Gedminas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.