Ich habe ein Verzeichnis, das meine Python-Unit-Tests enthält. Jedes Unit-Test-Modul hat die Form test_*.py . Ich versuche, eine Datei namens all_test.py die, Sie haben es erraten, alle Dateien in der oben erwähnten Testform ausführt und das Ergebnis zurückgibt. Ich habe bisher zwei Methoden ausprobiert; beide sind fehlgeschlagen. Ich werde die beiden Methoden zeigen und hoffe, dass jemand da draußen weiß, wie man das richtig macht.
Bei meinem ersten tapferen Versuch dachte ich: "Wenn ich einfach alle meine Testmodule in die Datei importiere und diese dann aufrufe unittest.main()
Dingsbums, das funktioniert doch, oder?" Nun, es stellte sich heraus, dass ich falsch lag.
import glob
import unittest
testSuite = unittest.TestSuite()
test_file_strings = glob.glob('test_*.py')
module_strings = [str[0:len(str)-3] for str in test_file_strings]
if __name__ == "__main__":
unittest.main()
Das hat nicht funktioniert, das Ergebnis war:
$ python all_test.py
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
Bei meinem zweiten Versuch dachte ich mir, ok, vielleicht versuche ich, diese ganze Testsache auf eine mehr "manuelle" Art und Weise zu machen. Also habe ich versucht, das unten zu tun:
import glob
import unittest
testSuite = unittest.TestSuite()
test_file_strings = glob.glob('test_*.py')
module_strings = [str[0:len(str)-3] for str in test_file_strings]
[__import__(str) for str in module_strings]
suites = [unittest.TestLoader().loadTestsFromName(str) for str in module_strings]
[testSuite.addTest(suite) for suite in suites]
print testSuite
result = unittest.TestResult()
testSuite.run(result)
print result
#Ok, at this point I have a result
#How do I display it as the normal unit test command line output?
if __name__ == "__main__":
unittest.main()
Auch das hat nicht funktioniert, aber es scheint so nahe dran zu sein!
$ python all_test.py
<unittest.TestSuite tests=[<unittest.TestSuite tests=[<unittest.TestSuite tests=[<test_main.TestMain testMethod=test_respondes_to_get>]>]>]>
<unittest.TestResult run=1 errors=0 failures=0>
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
Ich scheine eine Art von Suite zu haben, und ich kann das Ergebnis ausführen. Ich bin etwas besorgt über die Tatsache, dass es heißt, ich hätte nur run=1
scheint das zu sein run=2
aber es ist ein Fortschritt. Aber wie kann ich das Ergebnis an main übergeben und anzeigen? Oder wie bekomme ich es grundsätzlich so hin, dass ich nur diese Datei ausführen kann und dabei alle Unit-Tests in diesem Verzeichnis ausführe?