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)]
но это решение кажется немного уступает typecast, потому что он печатает только отдельные значения, если он терпит неудачу, а также не делает сбой для разных длин ссылок и данных (из-за функции zip).
3 ответа:
Python 3
- Если вы не важно о порядке содержания, у вас есть assertCountEqual (a,b) метод
- Если вы уход о порядке содержания, у вас есть assertSequenceEqual (a,b) метод
Python > = 2.7
- Если вы не важно о порядке содержания, у вас есть assertItemsEqual (a,b) метод
- Если вы уход о порядке содержания, у вас есть assertSequenceEqual (a,b) метод
вы всегда можете добавить свои собственные методы утверждения в свой класс 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
мне кажется, что вы заботитесь о порядке элементов в последовательностях. Таким образом,
assertItemsEqual
/assertCountEqual
Не для вас.в Python 2.7 и в Python 3, что вы хотите
self.assertSequenceEqual
. Это чувствительно к порядку элементов.