Ich habe ein Verzeichnis, das meine Python-Unit-Tests enthält. Jedes Unit-Test-Modul hat die Form test _ *. Py . Ich versuche, eine Datei mit dem Namen all_test.py zu erstellen , die, wie Sie es erraten haben, alle Dateien in der oben genannten Testform ausführt und das Ergebnis zurückgibt . Ich habe bisher zwei Methoden ausprobiert; beide sind gescheitert. Ich werde die beiden Methoden zeigen, und ich hoffe, jemand da draußen weiß, wie man das tatsächlich richtig macht.
Bei meinem ersten tapferen Versuch dachte ich: "Wenn ich nur alle meine unittest.main()
Testmodule in die Datei importiere und dann diesen Doodad aufrufe, funktioniert es, oder?" 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
Für meinen zweiten Versuch werde ich allerdings versuchen, diese ganze Testsache "manueller" 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()
Das hat auch nicht funktioniert, aber es scheint so nah!
$ 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 habe anscheinend eine Suite, und ich kann das Ergebnis ausführen. Ich bin ein wenig besorgt über die Tatsache, dass es heißt, ich habe nur run=1
, scheint so zu sein run=2
, aber es ist Fortschritt. Aber wie übergebe ich das Ergebnis und zeige es an main an? Oder wie kann ich es im Grunde zum Laufen bringen, damit ich diese Datei einfach ausführen und dabei alle Komponententests in diesem Verzeichnis ausführen kann?