Eu tenho um diretório que contém meus testes de unidade Python. Cada módulo de teste de unidade possui o formato test _ *. Py . Estou tentando criar um arquivo chamado all_test.py que, você adivinhou, executará todos os arquivos no formulário de teste mencionado acima e retornará o resultado. Eu tentei dois métodos até agora; ambos falharam. Vou mostrar os dois métodos e espero que alguém lá fora saiba como fazer isso corretamente.
Para minha primeira tentativa valente, pensei: "Se eu importar todos os meus módulos de teste no arquivo e chamar esse unittest.main()
doodad, ele funcionará, certo?" Bem, acontece que eu estava errado.
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()
Isso não funcionou, o resultado que obtive foi:
$ python all_test.py
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
Na minha segunda tentativa, eu acho que talvez eu tente fazer todo esse teste de uma maneira mais "manual". Então, tentei fazer isso abaixo:
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()
Isso também não funcionou, mas parece tão próximo!
$ 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
Parece que tenho algum tipo de suíte e posso executar o resultado. Estou um pouco preocupado com o fato de que ele diz que só tenho run=1
, parece que deveria ser run=2
, mas é progresso. Mas como passo e mostro o resultado para main? Ou como eu basicamente o faço funcionar para que eu possa executar este arquivo e, ao fazê-lo, executar todos os testes de unidade neste diretório?