使用单元测试中的doctests

Ric*_*ick 9 python

我通常在我的模块中编写单元测试和doctests.我想在运行测试套件时自动运行我的所有doctests.我认为这是可能的,但我在语法上遇到了困难.

我有测试套件

import unittest
class ts(unittest.TestCase):
    def test_null(self): self.assertTrue(True)
if __name__ == '__main__': unittest.main()
Run Code Online (Sandbox Code Playgroud)

我想在这个套件中添加模块中的所有doctests module1.我怎样才能做到这一点?我已经阅读了python文档,但是我在这里并没有更接近成功.添加线条

import doctest
import module1
suite = doctest.DocTestSuite(module1)
Run Code Online (Sandbox Code Playgroud)

不起作用.unittest.main()通过当前的文件范围和运行每个测试的搜索情况下,它发现,对不对?但是DocTestSuite会生成一个测试套件.如何unittest.main()在套件中运行其他案例?或者我只是困惑和迷惑?

再一次,我会感激任何人都可以提供的任何帮助.

小智 14

这个旧问题的更新:自Python版本2.7以来,有load_tests协议,不再需要编写自定义代码.它允许您添加一个函数load_tests(),测试加载器将执行该函数以更新其当前模块的单元测试集合.

在您的代码模块中放置这样的函数,将模块自己的doctests打包到测试套件中unittest:

def load_tests(loader, tests, ignore):
    tests.addTests(doctest.DocTestSuite())
    return tests
Run Code Online (Sandbox Code Playgroud)

或者,将这样的函数放入单元测试模块,将doctests从另一个模块(例如package.code_module)添加到已经存在的测试套件中:

def load_tests(loader, tests, ignore):
    tests.addTests(doctest.DocTestSuite(package.code_module))
    return tests
Run Code Online (Sandbox Code Playgroud)

unittest.TestLoader的方法loadTestsFromModule(),loadTestsFromName()discover()用于单元测试使用一个测试套件,包括两个单元测试和文档测试.


And*_*oev 8

在这段代码中,我结合了来自导入模块的单元测试和doctests

import unittest


class ts(unittest.TestCase):
    def test_null(self):
        self.assertTrue(True)


class ts1(unittest.TestCase):
    def test_null(self):
        self.assertTrue(True)

testSuite = unittest.TestSuite()    
testSuite.addTests(unittest.makeSuite(ts))
testSuite.addTest(unittest.makeSuite(ts1))

import doctest
import my_module_with_doctests

testSuite.addTest(doctest.DocTestSuite(my_module_with_doctests))
unittest.TextTestRunner(verbosity = 2).run(testSuite)
Run Code Online (Sandbox Code Playgroud)