unittest unit test skipif modules example python unit-testing dynamic

skipif - Python''s unittest y creación dinámica de casos de prueba



python unittest example (3)

Posible duplicado:
¿Cómo generar pruebas de unidades dinámicas (parametrizadas) en python?

¿Hay alguna manera de crear dinámicamente casos de prueba de prueba unittest ? He probado lo siguiente..

class test_filenames(unittest.TestCase): def setUp(self): for category, testcases in files.items(): for testindex, curtest in enumerate(testcases): def thetest(): parser = FileParser(curtest[''input'']) theep = parser.parse() self.assertEquals(theep.episodenumber, curtest[''episodenumber'']) setattr(self, ''test_%s_%02d'' % (category, testindex), thetest)

..que crea todos los métodos correctamente (se muestran en dir() y son invocables), pero el detector de prueba de unittest, ni nosetest ejecuta ("Pruebas de Ran 0 en ...")

Como puedo estar haciendo la pregunta incorrecta, lo que intento lograr:

Tengo un archivo que contiene datos de prueba, una lista de nombres de archivos de entrada y datos esperados (simplificados a episodenumber en el código anterior), almacenados en un diccionario de Python. La clave es la categoría, el valor es una lista de casos de prueba, por ejemplo ...

test_cases = {} test_cases[''example_1''] = [ {''input'': ''test.01'', ''episodenumber'': 1}, {''input'': ''test.02'', ''episodenumber'': 2} ] test_cases[''example_2''] = [ {''input'': ''another.123'', ''episodenumber'': 123}, {''input'': ''test.e42'', ''episodenumber'': 32} ]

Actualmente solo self.assertEquals todos los datos, llamo self.assertEquals en cada prueba. El problema es que, si uno falla, no veo el resto de las fallas, ya que también se agrupan en una prueba, que se cancela cuando falla una afirmación.

La forma de solucionar esto, pensé, sería (dinámicamente) crear una función para cada caso de prueba, ¿tal vez hay una mejor manera?


En la siguiente solución, las Tests clase contienen la check método auxiliar y no hay casos de prueba definidos estáticamente. Luego, para agregar dinámicamente casos de prueba, utilizo setattr para definir funciones en la clase. En el siguiente ejemplo, genero casos de prueba test_<i>_<j> con i y j abarcando [1,3] y [2,5] respectivamente, que usan la check método auxiliar con diferentes valores de i y j.

class Tests(unittest.TestCase): def check(self, i, j): self.assertNotEquals(0, i-j) for i in xrange(1, 4): for j in xrange(2, 6): def ch(i, j): return lambda self: self.check(i, j) setattr(Tests, "test_%r_%r" % (i, j), ch(i, j))



Para esto deberías usar generators prueba en la nariz. Todo lo que necesita hacer es ceder una tupla, siendo la primera una función y el resto los args. De los documentos aquí está el ejemplo.

def test_evens(): for i in range(0, 5): yield check_even, i, i*3 def check_even(n, nn): assert n % 2 == 0 or nn % 2 == 0