2012-10-01 12 views
15

Folder mój unittest jest zorganizowany w ten sposób.Wykrywanie Python unittest z podfolderami

. 
|-- import 
| |-- import.kc 
| |-- import.kh 
| `-- import_test.py 
|-- module 
| |-- module.kc 
| |-- module.kh 
| `-- module_test.py 
`-- test.py 

chciałbym po prostu uruchomić test.py uruchomić każdy z moich *_test.py użyciu unittest moduł Pythona. Obecnie mój test.py zawiera

#!/usr/bin/env python 

import unittest 

if __name__ == "__main__": 
    suite = unittest.TestLoader().discover('.', pattern = "*_test.py") 
    unittest.TextTestRunner(verbosity=2).run(suite) 

Dokumentacja pyton mówi, że powinien on automatycznie wykrywają próbę w podfolderów. Ale tak nie jest.

W tej chwili to tylko wyprowadza

---------------------------------------------------------------------- 
Ran 0 tests in 0.000s 

OK 

Jestem pewien, że nie jest to problem z moim pliku *_test.py, bo kiedy je przenieść do katalogu, to działa dobrze .. co ja Robię źle?

Odpowiedz

19

Dodaj __init__.py w katalogach import i module.

+0

Po prostu dotykałem pliku '__init __. Py', dziękuję. Czy możesz mi wyjaśnić, dlaczego muszę to zrobić? I czy istnieje inne rozwiązanie, które? Ponieważ pracuję z innymi ludźmi i chciałbym, żeby testy były najłatwiejsze do stworzenia. – tomahh

+2

Jest to artefakt dotyczący sposobu implementacji wykrywania testów. Zasadniczo każdy katalog zawierający test musi być importowalny jako moduł Pythona. Więcej informacji można znaleźć w [docs] (http://docs.python.org/2/library/unittest.html#test-discovery). –

2

Należy rozważyć użycie nose zamiast modułu waniliowego unittest, jeśli możliwe jest przełączenie. Nie będziesz musiał zadzierać z własnym plikiem test.py ani czymkolwiek; bieg nosetests znajdzie i uruchomi wszystkie twoje testy.

Powiązane problemy