2015-10-06 28 views
2

在Django中,我的測試是一組test_foo.pymy_django_app/tests/中的文件,每個文件包含一個TestCase子類,並自動查找並運行哪個django。如何讓django的unittest TestLoader查找並運行我的文檔測試?

我有一堆帶簡單文檔測試的實用程序模塊,我想將其包含在我的測試套件中。我嘗試使用doctest.DocTestSuite()來定義my_django_app/tests/test_doctests.py中的測試套件,但是django的測試運行器在該模塊中找不到新測試。

有沒有一種方法可以創建一個TestCase類來調用我的doctests,或者以某種方式定義一個新的tests/test_foo.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()測試模塊:

回答

0

我通過創建一個新的模塊,my_django_app/tests/test_doctests.py,看起來像解決了這個。所以我們定義了load_tests,它創建了所有文檔測試的測試套件。

1

Django unittests discovery的automagic會在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 

此外,由於添加到測試套件......在unittestload_tests功能中的錯誤(?)不會被運行,除非你test_foo模塊還定義了一個TestCase派生類如下:

class DoNothingTest(TestCase): 
    """Encourage Django unittests to run `load_tests()`.""" 
    def test_example(self): 
     self.assertTrue(True) 
相關問題