Подтвердить что ты не робот

Unittest assertEqual и iterables - проверять содержимое только

Есть ли "достойный" способ в unittest, чтобы проверить равенство содержимого двух итерируемых объектов? Я использую множество кортежей, списков и массивов 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-функции).

4b9b3361

Ответ 1

Python 3

  • Если вы не заботитесь о порядке содержимого, у вас есть assertCountEqual (a, b) метод
  • Если вы заботитесь о порядке контента, у вас есть метод assertSequenceEqual (a, b)

Python >= 2.7

  • Если вы не заботитесь о порядке содержимого, у вас есть assertItemsEqual (a, b) метод
  • Если вы заботясь о порядке содержимого, у вас есть метод assertSequenceEqual (a, b)

Ответ 2

Вы всегда можете добавить свои собственные методы утверждения в свой класс 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

Ответ 3

Мне кажется, вы заботитесь о порядке элементов в последовательности. Поэтому assertItemsEqual/assertCountEqual не для вас.

В Python 2.7 и в Python 3 вы хотите self.assertSequenceEqual. Это чувствительно к порядку элементов.