Есть ли способ проверить с помощью Python unittest assert, если iterable не пуст?
после отправки запросов в службу я получаю Словарь / Список, и я хочу убедиться, что он не пуст. Я на Python 2.7.
Я удивлен, что не вижу никаких assertEmpty
метод unittest.TestCase
экземпляр класса.
существующие альтернативы, такие как:
self.assertTrue(bool(d))
и
self.assertNotEqual(d,{})
и
self.assertGreater(len(d),0)
просто не смотри прямо.
этот метод отсутствует в unittest Python рамки? если да, что бы быть наиболее подходящие для Python способ, чтобы утверждать, что Iterable является не пустым?
5 ответов
зависит именно от того, что вы ищете.
Если вы хотите, чтобы убедиться, что объект является Iterable и он не пустой:
# TypeError: object of type 'NoneType' has no len()
# if my_iterable is None
self.assertTrue(len(my_iterable))
если это нормально для тестируемого объекта, чтобы быть None
:
self.assertTrue(my_maybe_iterable)
как уже упоминалось @gplayer: можно проверить отсутствие пустоты с помощью assertTrue()
(и наоборот с assertFalse()
для пустоты, естественно).
но, как и @Alex Tereshenkov ранее указал в комментариях, все те assertTrue()
и assertFalse()
вызовы методов загромождают код и вводят в заблуждение, потому что мы хотели проверить пустоту.
таким образом, ради более чистого кода мы можем определить наш собственный assertEmpty()
и assertNotEmpty()
методы:
def assertEmpty(self, obj):
self.assertFalse(obj)
def assertNotEmpty(self, obj):
self.assertTrue(obj)
весь кредит для этого идет на winklerrr, я просто расширяю его идею: есть импортные миксины, когда вам нужно assertEmpty или assertNotEmpty:
class AssertEmptyMixin( object ):
def assertEmpty(self, obj):
self.assertFalse(obj)
class AssertNotEmptyMixin( object ):
def assertNotEmpty(self, obj):
self.assertTrue(obj)
предостережение, миксины должны идти слева:
class MyThoroughTests( AssertNotEmptyMixin, TestCase ):
def test_my_code( self ):
...
self.assertNotEmpty( something )