Escribí un script de python para hacer todas mis pruebas automáticamente y generar un informe HTML. Descubrí el discover para pruebas unitarias el otro día, que me permite ejecutar todas las pruebas unitarias en un directorio determinado sin nombrarlas explícitamente, y realmente me gustaría poder hacer mis pruebas documentales de la misma manera, en lugar de tener que importar cada módulo explícitamente.
Encontré información sobre cómo hacer esto en https://docs.python.org/2/library/doctest.html pero realmente no la entendí. ¿Podría ayudarme con el uso de Discover con mis discover ?
El descubrimiento de pruebas de Python con doctests, cobertura y paralelismo está relacionado, pero aún no responde a mi pregunta.
módulo_cobertura
import coverage import doctest import unittest import os # import test_module import my_module cov = coverage.Coverage() cov.start() # running doctest by explicity naming the module doctest.testmod(my_module) # running unittests by just specifying the folder to look into testLoad = unittest.TestLoader() testSuite = testLoad.discover(start_dir=os.getcwd()) runner = unittest.TextTestRunner() runner.run(testSuite) cov.stop() cov.save() cov.html_report() print "tests completed"módulo_prueba
import unittest import doctest from my_module import My_Class class My_Class_Tests(unittest.TestCase): def setUp(self): # setup variables def test_1(self): # test code # The bit that should load up the doctests? What's loader, tests, and ignore though? # Is this in the right place? def load_tests(loader, tests, ignore): tests.addTests(doctest.DocTestSuite(module_with_doctests)) return tests if __name__ == '__main__': unittest.main()Vamos a averiguar lo que está pasando allí
1) unittest.descubrimiento
No tiene idea de doctests ya que doctests es un marco diferente. Por lo tanto, no se supone que unittest descubra doctests de forma inmediata. Eso significa que tendrás que pegarlos a mano.
2) prueba
Es esencialmente un marco separado, aunque tiene algunas clases de pegado para convertir doctests en TestCases similares a unittest. https://docs.python.org/2.7/library/doctest.html#doctest.DocTestSuite
3) descubrir
No entendí a qué te refieres con discover , supongo que es
python -m unittest discoverSi no es así y estás hablando de https://pypi.python.org/pypi/discover , entonces olvídalo: es un backport para versiones anteriores de python.
4) que hacer
o disperse una gran cantidad de load_tests en su código como se describe aquí https://docs.python.org/2.7/library/doctest.html#unittest-api o codifique un método para recopilar todos los módulos que tiene en un solo lugar y convertir en un DocTestSuite[s] https://docs.python.org/2.7/library/doctest.html#doctest.DocTestSuite
Pero, sinceramente, ninguno de los enfoques tiene sentido hoy en día, ya que se reduce a:
$ py.test --doctest-moduleso
$ nosetests --with-doctest Por supuesto, estos marcos también brindan coverage y muchas campanas y silbatos y puede seguir apegado a unittest.TestCase, y ni siquiera necesitará crear un módulo de cobertura , por lo que profundizaría en uno de ellos en lugar de intentar encontrar con tu propia solución