2012-01-25 17 views
6

Używam unittest Pythona z prostego kodu tak:Jak mogę wyodrębnić listę testcases z TestSuite?

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

Jednak Ja chce zrobić kilka niestandardowych rzeczy do każdego testu po zostały one zebrane przez pakiet. Myślałem, że mogę zrobić coś takiego iteracyjne nad przypadków testowych w apartamencie:

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

Jednak tak wielu przypadków testowych, jak załadować, to zawsze tylko drukuje

3 
<class 'unittest.suite.TestSuite'> 

Czy istnieje sposób Czy mogę pobrać wszystkie obiekty klasy TestCase z pakietu? Czy jest jakiś inny sposób ładowanie przypadków testowych, aby to ułatwić?

Odpowiedz

5

Spróbuj

for test in suite: 
    print test._tests 
+1

OK, myślę, że tego właśnie chciałem. Zauważyłem testy _, ale próbowałem nazywać je 'print suite._tests'. Sądzę, że po prostu naszkicuję to, że jestem noobem w Pythonie. – denaje

+0

Miałem zamiar, ale najwyraźniej musisz poczekać 10 minut, zanim zaakceptujesz. Dzięki wielkie! – denaje

1

mogę używać tej funkcji, jak niektóre z elementów suite._tests to apartamenty się:

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

Schludny sposób na uzyskanie listy testów jest użycie nose2 zbierać podłącz.

$ 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 

To naprawdę nie działa testów.

Można zainstalować nose2 (i to plugins), jak to:

$ pip install nose2 

I oczywiście można użyć nose2 uruchomić testy jednostkowe np lubię to albo to:

# 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 
Powiązane problemy