- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我编写了一个 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/
我正在使用 doctest ,并且喜欢我可以从定义它们的地方测试非导出函数的事实: module Foo (frobnicate) where -- | -- >>> randomInt = 42 -
我有一个简单的 function with a doctest ,当使用 Sphinx 的 make doctest 运行时,出现以下错误: File "scheemey.rst", line ?,
文档似乎不太清楚如何解决以下问题...... def test(): """ >>> import doctest >>> doctest.ELLIPSIS_MARKER =
我通常使用 code auto-formatter Black ,它训练我使用双引号。使用双引号已成为我的“肌肉内存”。 许多类的默认 repr 使用单引号从 Python 交互式输出中打印出来。我知
我需要对一个必须用装饰器包装的方法进行文档测试,该装饰器不将 @functools.wraps 或 functools.update_wrapper 应用于被包装的方法.在这种情况下,doctest
我很困惑为什么 doctest.testmod() 以奇怪的顺序调用测试函数 from doctest import testmod def test_forwrite(): '''
import doctest def create_grid(size): grid = [] for i in range(size): row = ['0']*size
这可能是一个愚蠢的问题。 我正在尝试使用 python doctest,并且尝试运行 this示例 结尾为 if __name__ == "__main__": import doctest
我正在创建一个程序宏,它从一些配置文件自动生成一个库(这是一个寄存器布局,但这对问题并不重要)。 我希望库自动生成伴随自动库的文档,并包含应与 cargo test 一起运行的文档测试。现在,我已经实
这个问题在这里已经有了答案: How do you handle the "could not parse code block as Rust code" rustdoc warning? (1
我正在为一个模块编写文档,该模块具有一些由 Cargo 功能标志控制的选项。我想始终显示此文档,以便 crate 的消费者知道它可用,但我只需要在启用该功能时运行该示例。 库.rs //! This
我的函数从文件中读取,需要以独立于绝对路径的方式编写 doctest。编写 doctest 的最佳方法是什么?编写临时文件的成本很高,而且不是万无一失的。 最佳答案 您可以有一个采用路径的参数,用下划
如果我需要在 doctest 中做一些事情怎么办: ''' >>> for i in range(5): print i ''' 我明白了 for i in range(5):
我正在尝试通过 iex 使用 doctest 测试 HashSet。如果我运行下面的行,它会给出相同的结果,但是 #HashSet}无法在语法中表示。我想不出一种正确表示它的方法,也找不到任何例子。谢
我已经进行了搜索,但找不到我想要的东西。 我的代码如下: import datetime import doctest import os def parseOptions(): import
我有一个函数可以使用 random 模块将用户输入变量与随机生成的数字进行比较。我想写一个 doctest,它将要求忽略或覆盖随机生成的数字。 在我无知的情况下,我试图给随机变量赋值,但仍然生成了一个
测试这样的代码的最佳方法是什么(下面的代码显然失败了,因为每次都在不同的 block 中创建对象): def get_session(db_name, verbose, test): """Retur
我已经编写了一个用于测试的assert_raised 上下文管理器,它检查是否按预期引发异常,如果没有引发AssertionError。我还写了一个 doctest 来测试这个,但是 doctest
我有一个 doctest,我在其中测试 float 转换: >>> float('fish') 在 Python >> float('fish') ValueError:... 你可以看到 Alex
假设我有以下代码: def foo(s): """A dummy function foo. For example: >>> a = '''This is a test string lin
我是一名优秀的程序员,十分优秀!