我通常在我的模块中编写单元测试和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()用于单元测试使用一个测试套件,包括两个单元测试和文档测试.
在这段代码中,我结合了来自导入模块的单元测试和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)
| 归档时间: |
|
| 查看次数: |
1656 次 |
| 最近记录: |