Подтвердить что ты не робот

Как я могу интегрировать доктрины с помощью unittest test discovery?

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

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

Обнаружение теста Python с помощью доктрин, охвата и 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 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()
4b9b3361

Ответ 1

Давайте выясним, что там происходит

1) unittest.discovery

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

2) doctest

Это, по сути, отдельная структура, хотя у нее есть некоторые классы склеивания для преобразования доктринов в тестовые классы, подобные Unittest. 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 [s] https://docs.python.org/2.7/library/doctest.html#doctest.DocTestSuite

Но, честно говоря, ни один подход не имеет никакого смысла в настоящее время, поскольку он сводится к следующему:

$ py.test --doctest-modules

или

$ nosetests --with-doctest

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