gpt4 book ai didi

python - 如何将 doctests 与 unittest 的测试发现相结合?

转载 作者:太空狗 更新时间:2023-10-29 16:57:54 26 4
gpt4 key购买 nike

我编写了一个 python 脚本来自动为我完成所有测试,并生成一个 HTML 报告。前几天我发现了用于单元测试的 discover,它让我可以在给定目录中运行所有单元测试而无需明确命名它们,我真的很想能够以相同的方式进行我的文档测试,而不是必须显式导入每个模块。

我在 https://docs.python.org/2/library/doctest.html 找到了一些关于如何执行此操作的信息但并没有真正明白。你能帮我在我的 doctests 中使用 discover 吗?

Python test discovery with doctests, coverage and 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"

测试模块

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's 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()

最佳答案

让我们弄清楚那里发生了什么

1) unittest.discovery

它没有 doctests 的线索,因为 doctests 是一个不同的框架。所以 unittest 不应该开箱即用地发现 doctests。这意味着您需要用手将它们粘在一起

2) 文档测试

它本质上是一个独立的框架,尽管它有一些粘合类可以将 doctests 转换为类似 unittests 的 TestCases。 https://docs.python.org/2.7/library/doctest.html#doctest.DocTestSuite

3) 发现

没明白discover你的意思,我想是

python -m unittest discover

如果不是,您正在谈论 https://pypi.python.org/pypi/discover然后忘记它 - 它是早期版本的 python 的反向端口

4) 做什么

要么按照此处所述在您的代码中分散大量的 load_tests Hook 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,甚至不需要创建 coverage_module 所以我会深入研究其中之一,而不是尝试提出您自己的解决方案

关于python - 如何将 doctests 与 unittest 的测试发现相结合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42340772/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com