Ho una directory che contiene i miei test di unità Python. Ogni modulo di unit test ha la forma test _ *. Py . Sto tentando di creare un file chiamato all_test.py che, hai indovinato, eseguirà tutti i file nel modulo di test di cui sopra e restituirà il risultato. Finora ho provato due metodi; entrambi hanno fallito. Mostrerò i due metodi e spero che qualcuno là fuori sappia come farlo correttamente.
Per il mio primo coraggioso tentativo, ho pensato "Se solo importassi tutti i miei moduli di test nel file e poi chiamassi questo unittest.main()
doodle, funzionerà, giusto?" Bene, ho scoperto che mi sbagliavo.
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()
Questo non ha funzionato, il risultato che ho ottenuto è stato:
$ python all_test.py
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
Per il mio secondo tentativo, però, ok, forse proverò a fare tutto questo test in modo più "manuale". Quindi ho tentato di farlo di seguito:
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()
Anche questo non ha funzionato, ma sembra così vicino!
$ 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
Mi sembra di avere una suite di qualche tipo e posso eseguire il risultato. Sono un po 'preoccupato per il fatto che dice che ho solo run=1
, sembra che dovrebbe essere run=2
, ma è un progresso. Ma come posso passare e visualizzare il risultato sul main? O come faccio praticamente a farlo funzionare in modo da poter semplicemente eseguire questo file e, nel fare ciò, eseguire tutti i test unitari in questa directory?