unittest unit run not examples español equal python python-2.7 unit-testing assertions python-unittest

run - unittest python 3



¿Hay alguna manera de verificar con Python unittest assert si un iterable no está vacío? (5)

Después de enviar las consultas a un servicio, recupero una lista de diccionario / y quiero asegurarme de que no esté vacía. Estoy en Python 2.7.

Me sorprende que no vea ningún método assertEmpty para la instancia de la clase assertEmpty .

Las alternativas existentes tales como:

self.assertTrue(bool(d))

y

self.assertNotEqual(d,{})

y

self.assertGreater(len(d),0)

simplemente no se ve bien.

¿Este tipo de método falta en el marco de prueba de Python? En caso afirmativo, ¿cuál sería la forma más pitónica de afirmar que un iterable no está vacío?


Como @gplayer ya mencionó: es posible verificar la ausencia de vacío con assertTrue() (y viceversa con assertFalse() por vacío, por supuesto).

Pero, como @Alex Tereshenkov ha señalado anteriormente en los comentarios, todas esas llamadas al método assertTrue() y assertFalse() desordenan el código y son un tanto engañosas porque queríamos comprobar el vacío.

Entonces, en aras de un código más limpio, podemos definir nuestros propios assertEmpty() y assertNotEmpty() :

def assertEmpty(self, obj): self.assertFalse(obj) def assertNotEmpty(self, obj): self.assertTrue(obj)


Depende exactamente lo que estás buscando.

Si quiere asegurarse de que el objeto sea iterable y no esté vacío:

# TypeError: object of type ''NoneType'' has no len() # if my_iterable is None self.assertTrue(len(my_iterable))

Si está bien que el objeto que se prueba sea None :

self.assertTrue(my_maybe_iterable)


Las listas vacías / dictados se evalúan como False, por lo que self.assertTrue(d) el trabajo.


Tal vez:

self.assertRaises(StopIteration, next(iterable_object))


Todo el mérito de esto se lo debo a winklerrr, solo estoy ampliando su idea: tenga mixins importables para cuando necesite assertEmpty o assertNotEmpty:

class AssertEmptyMixin( object ): def assertEmpty(self, obj): self.assertFalse(obj) class AssertNotEmptyMixin( object ): def assertNotEmpty(self, obj): self.assertTrue(obj)

Advertencia, mixins debe ir a la izquierda:

class MyThoroughTests( AssertNotEmptyMixin, TestCase ): def test_my_code( self ): ... self.assertNotEmpty( something )