2017-02-20 32 views
13

Я написал сценарий python для выполнения всех своих тестов автоматически для меня и создания отчета HTML. На днях я обнаружил discover для unittests, который позволяет запускать все unittests в заданном каталоге без явного их названия, и я действительно хотел бы иметь возможность делать свои доктрины одинаково, вместо того, чтобы явно импортировать каждый модуль.Как я могу интегрировать доктрины с обнаружением тестов unittest?

Я нашел информацию о том, как это сделать на https://docs.python.org/2/library/doctest.html, но на самом деле это не получилось. Не могли бы вы помочь мне с использованием discover с моими учениями?

Python test discovery with doctests, coverage and parallelism связан, но все еще не отвечает на мой вопрос.

coverage_module

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" 

test_module

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() 
+5

'pytest' считается эталон для тестов на Python в настоящее время, поэтому я Рекомендуем проверить его. Похоже, у него также есть хорошая поддержка для доктрин: http://doc.pytest.org/en/latest/doctest.html – yedpodtrzitko

ответ

4

Позволяет выяснить, что там происходит

1) unittest.discovery

Он не имеет понятия о доктринах, поскольку доктрины - это разные рамки. Так что unittest не должен открывать учения из коробки. Это означает, что вам нужно склеить их вместе вручную

2) doctest

Это по существу отдельная структура, хотя она имеет некоторые склейки классы для преобразования doctests в UnitTest типа TestCases. https://docs.python.org/2.7/library/doctest.html#doctest.DocTestSuite

3) открыть

Не получить то, что discover вы имеете в виду, я полагаю, что это

python -m unittest discover 

Если нет, и вы говорите о https://pypi.python.org/pypi/discover то просто забыть об этом - это backport для более ранних версий python

4) что делать

либо рассеивают много load_tests крючков через код, как описано здесь https://docs.python.org/2.7/library/doctest.html#unittest-api или код метода для сбора всех модулей ваш есть в одном месте и превратить их в DocTestSuite [с] https://docs.python.org/2.7/library/doctest.html#doctest.DocTestSuite

Но честно ни подход имеет смысл ныне, как это сводится к:

$ py.test --doctest-modules 

или

$ nosetests --with-doctest 

Конечно, coverage и множество колоколов & свиста также поставляются этими каркасами, и вы можете продолжать придерживаться unittest.TestCase, и вам даже не понадобится создавать cover_module, поэтому я бы выкопал в один из них, а затем попытался придумать собственное решение.