web-dev-qa-db-ja.com

UnittestのassertEqualおよびiterables-内容のみをチェックします

Unittestで、2つの反復可能なオブジェクトの内容の等価性をチェックする「適切な」方法はありますか?私は多くのタプル、リスト、numpy配列を使用していますが、通常はタイプではなくコンテンツのみをテストします。現在、私は単に型をキャストしています:

self.assertEqual (Tuple (self.numpy_data), Tuple (self.reference_list))

私は少し前にこのリストの内包表記を使用しました:

[self.assertEqual (*x) for x in Zip(self.numpy_data, self.reference_list)]

しかし、このソリューションは、失敗した場合に単一の値を出力するだけでなく、さまざまな長さの参照とデータ(Zip関数による)でも失敗しないため、タイプキャストより少し劣っているようです。

63
Lucas Hoepner

Python 3

Python> = 2.7

93
Cédric Julien

TestCaseクラスには、いつでも独自のアサーションメソッドを追加できます。

def assertSequenceEqual(self, it1, it2):
    self.assertEqual(Tuple(it1), Tuple(it2))

または2.7の定義を見てください: http://hg.python.org/cpython/file/14cafb8d1480/Lib/unittest/case.py#l621

9
Ned Batchelder

シーケンス内のアイテムの順序に関心があるように見えます。したがって、assertItemsEqual/assertCountEqualはあなたのためではありません。

In Python 2.7 and in Python 3、欲しいものは self.assertSequenceEqual 。これは、アイテムの順序に敏感です。

0
user7610