2012-10-01 16 views
15

Mein Unittest-Ordner ist auf diese Weise organisiert.Python-Unittest-Erkennung mit Unterordnern

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

Ich würde wollen einfach test.py laufen jedes meiner *_test.py mit Unittest Python-Modul auszuführen. Derzeit meine test.py enthält

#!/usr/bin/env python 

import unittest 

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

Die Python-Dokumentation sagt, dass es automatisch mein Test in den Unterordnern entdecken sollten. Aber das tut es nicht.

Im Moment gibt es nur

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

OK 

Ich bin sicher, dass es kein Problem mit meiner *_test.py Datei ist, weil, wenn ich sie in das Root-Verzeichnis zu verschieben, es funktioniert gut .. Was ist Ich mache falsch?

Antwort

19

Fügen Sie __init__.py in den Verzeichnissen import und module hinzu.

+0

Es funktionierte nur durch Berühren der '__init __. Py' Datei, danke. Kannst du mir erklären, warum ich das machen muss? Und gibt es eine andere Lösung? Weil ich mit anderen Leuten arbeite, und ich möchte, dass Tests der einfachste Weg sind, um zu schaffen. – tomahh

+2

Dies ist ein Artefakt der Art, wie die Testentdeckung implementiert wird. Im Prinzip muss jedes Verzeichnis, das einen Test enthält, als Python-Modul importiert werden können. Weitere Informationen finden Sie unter [docs] (http://docs.python.org/2/library/unittest.html#test-discovery). –

2

Verwenden Sie nose statt der Vanille unittest Modul, wenn Sie in der Lage sind zu wechseln. Sie müssen sich nicht mit Ihrer eigenen test.py-Datei oder irgendetwas herumschlagen; Ein Lauf von nosetests wird alle Ihre Tests finden und ausführen.

Verwandte Themen