如何让 django 的 unittest TestLoader 找到并 运行 我的 doctests?
How to get django's unittest TestLoader to find and run my doctests?
在 Django 中,我的测试是 my_django_app/tests/
中的一组 test_foo.py
文件,每个文件都包含一个 TestCase
子 class,django 会自动查找和 运行s.
我有一堆带有简单文档测试的实用程序模块,我想将它们包含在我的测试套件中。我尝试使用 doctest.DocTestSuite()
在 my_django_app/tests/test_doctests.py
中定义测试套件,但是 django 的测试 运行ner 没有在那个模块中找到新的测试。
有没有一种方法可以创建一个调用我的 doctest 的测试用例 class,或者以其他方式定义一个新的 tests/test_foo.py
模块来 运行 这些测试?
我通过创建一个新模块 my_django_app/tests/test_doctests.py
解决了这个问题,它看起来像:
import doctest
import unittest
# These are my modules that contain doctests:
from util import bitwise
from util import text
from util import urlutil
DOCTEST_MODULES = (
bitwise,
text,
urlutil,
)
# unittest.TestLoader will call this when it finds this module:
def load_tests(*args, **kwargs):
test_all_doctests = unittest.TestSuite()
for m in DOCTEST_MODULES:
test_all_doctests.addTest(doctest.DocTestSuite(m))
return test_all_doctests
Django 使用内置单元测试 TestLoader,在测试发现期间,它会在您的测试模块上调用 load_tests()。所以我们定义 load_tests
它从所有的 doctests 中创建一个测试套件。
Django 的 automagic unittests
发现在您的 test_foo 模块中查找 load_tests
函数并将 运行 它。所以你可以使用它来将你的 doctests 添加到测试套件中......
import doctest
import module_with_doctests
def load_tests(loader, tests, ignore):
tests.addTests(doctest.DocTestSuite(module_with_doctests))
return tests
此外,由于 unittest
中的错误(?),您的 load_tests
函数将不会是 运行,除非您的 test_foo
模块也定义了 TestCase
-派生 class 像这样:
class DoNothingTest(TestCase):
"""Encourage Django unittests to run `load_tests()`."""
def test_example(self):
self.assertTrue(True)
在 Django 中,我的测试是 my_django_app/tests/
中的一组 test_foo.py
文件,每个文件都包含一个 TestCase
子 class,django 会自动查找和 运行s.
我有一堆带有简单文档测试的实用程序模块,我想将它们包含在我的测试套件中。我尝试使用 doctest.DocTestSuite()
在 my_django_app/tests/test_doctests.py
中定义测试套件,但是 django 的测试 运行ner 没有在那个模块中找到新的测试。
有没有一种方法可以创建一个调用我的 doctest 的测试用例 class,或者以其他方式定义一个新的 tests/test_foo.py
模块来 运行 这些测试?
我通过创建一个新模块 my_django_app/tests/test_doctests.py
解决了这个问题,它看起来像:
import doctest
import unittest
# These are my modules that contain doctests:
from util import bitwise
from util import text
from util import urlutil
DOCTEST_MODULES = (
bitwise,
text,
urlutil,
)
# unittest.TestLoader will call this when it finds this module:
def load_tests(*args, **kwargs):
test_all_doctests = unittest.TestSuite()
for m in DOCTEST_MODULES:
test_all_doctests.addTest(doctest.DocTestSuite(m))
return test_all_doctests
Django 使用内置单元测试 TestLoader,在测试发现期间,它会在您的测试模块上调用 load_tests()。所以我们定义 load_tests
它从所有的 doctests 中创建一个测试套件。
Django 的 automagic unittests
发现在您的 test_foo 模块中查找 load_tests
函数并将 运行 它。所以你可以使用它来将你的 doctests 添加到测试套件中......
import doctest
import module_with_doctests
def load_tests(loader, tests, ignore):
tests.addTests(doctest.DocTestSuite(module_with_doctests))
return tests
此外,由于 unittest
中的错误(?),您的 load_tests
函数将不会是 运行,除非您的 test_foo
模块也定义了 TestCase
-派生 class 像这样:
class DoNothingTest(TestCase):
"""Encourage Django unittests to run `load_tests()`."""
def test_example(self):
self.assertTrue(True)