2012-01-25 11 views
6

estoy usando unittest de Python con el código simple de este modo:¿Cómo puedo extraer una lista de TestCases de TestSuite?

suite = unittest.TestSuite() 
suite.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(module1)) 
suite.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(module2)) 

Sin embargo, yo estoy queriendo hacer algunas cosas personalizadas para cada prueba después de haber sido seleccionada por la suite. Pensé que podría hacer algo como esto para iterar sobre los casos de prueba en la suite:

print suite.countTestCases() 
for test in suite:    # Also tried with suite.__iter__() 
    # Do something with test 
    print test.__class__ 

Sin embargo, para el mayor número de casos de prueba que me carga, que sólo ha imprime

3 
<class 'unittest.suite.TestSuite'> 

¿Hay una manera Puedo obtener todos los objetos de la clase TestCase de la suite? ¿Hay alguna otra forma en que deba cargar casos de prueba para facilitar esto?

Respuesta

5

Trate

for test in suite: 
    print test._tests 
+1

Ok, creo que eso es lo que quería. Noté los _tests, pero estaba tratando de llamarlo como 'print suite._tests'. Supongo que lo atribuiré a ser novato en Python. – denaje

+0

Iba a ir, pero aparentemente tienes que esperar 10 minutos antes de aceptar. ¡Muchas gracias! – denaje

1

puedo utilizar esta función ya que algunos de los elementos en suite._tests son suites mismos:

def list_of_tests_gen(s): 
    """ a generator of tests from a suite 

    """ 
    for test in s: 
    if unittest.suite._isnotsuite(test): 
     yield test 
    else: 
     for t in list_of_tests_gen(test): 
     yield t 
0

una clara forma de lista de pruebas de conseguir es el uso de los nose2 recogen enchufar.

$ nose2 -s <testdir> -v --plugin nose2.plugins.collect --collect-only 
test_1 (test_test.TestClass1) 
Test Desc 1 ... ok 
test_2 (test_test.TestClass1) 
Test Desc 2 ... ok 
test_3 (test_test.TestClass1) 
Test Desc 3 ... ok 
test_2_1 (test_test.TestClass2) 
Test Desc 2_1 ... ok 
test_2_2 (test_test.TestClass2) 
Test Desc 2_2 ... ok 

---------------------------------------------------------------------- 
Ran 5 tests in 0.001s 

OK 

Realmente no ejecuta las pruebas.

Puede instalar nose2 (y es) plugins como este:

$ pip install nose2 

Y, por supuesto, puede utilizar nose2 para ejecutar pruebas unitarias, por ejemplo, como esto o esto:

# run tests from testfile.py 
$ nose2 -v -s . testfile 

# generate junit xml results: 
$ nose2 -v --plugin nose2.plugins.junitxml -X testfile --junit-xml 
$ mv nose2-junit.xml results_testfile.xml 
Cuestiones relacionadas