Есть ли способ проверить с помощью 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 ответов


пустые списки / дикты оценивают в False, поэтому self.assertTrue(d) получает работу.


зависит именно от того, что вы ищете.

Если вы хотите, чтобы убедиться, что объект является 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)

возможно:

self.assertRaises(StopIteration, next(iterable_object))

весь кредит для этого идет на 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 )