gpt4 book ai didi

python - 如何让 pytest 在已安装的模块中发现并运行 doctests?

转载 作者:行者123 更新时间:2023-11-28 19:53:29 25 4
gpt4 key购买 nike

我正在将单元测试添加到一种“遗留”Python 包中。一些模块包含嵌入在文档字符串中的自己的文档测试。我的目标是运行这些文档测试和新的专用单元测试。

正在关注 this Q&A (“如何让 py.test 运行 doctests 以及正常的测试目录?”)我正在使用 --doctest-modules pytest 的选项。从源存储库运行时,pytest 确实从 src 目录下的 Python 模块中发现了嵌入式 doctest。

但是,我的目标是测试源代码分发是否完全构建和安装,然后针对已安装 包测试所有内容。为此,我使用了 tox,它可以自动构建 sdist(源代码分发)tarball,将其安装在虚拟环境中,并针对已安装的运行测试版本。为确保测试导入的是已安装的版本,而不是源存储库中的版本,我遵循建议 in this article。存储库现在看起来像这样:

repo/
src/
my_package/
__init__.py
module_a.py
module_b.py
...
tests/
test_this.py
test_that.py
requirements.txt
setup.py
tox.ini

(tests 下的测试脚本像 import my_package 一样导入包,这会命中已安装的版本,因为存储库布局确保 src/my_package 目录在模块搜索路径之外。)

tox配置文件中,相关部分看起来像

[tox]
envlist = py27,py36,coverage-report

[testenv]
deps =
-rrequirements.txt
commands =
coverage run -p -m pytest --

[pytest]
addopts = --doctest-modules

到目前为止,测试运行良好,文档测试是从 src/my_package 下的模块中获取的,而不是从安装在 tox virtual 中的包中获取的环境。

我与此设置相关的问题如下:

  • 这真的是一个问题吗? tox 似乎可以确保您安装的是源存储库中的内容,但它确实如此吗?
  • 我如何指示 pytest 以一种干净的方式从已安装的模块实际运行 doctests?我可以想到一些解决方案,例如在 doc 目录中构建一个专用的文档树,然后让 pytest 使用 --doctest-glob 在其中找到 doctests 选项。但是有没有一种方法可以在不先构建文档的情况下做到这一点?

最佳答案

我找到了我自己问题的答案。

引用pytest issue #2042 :

currently doctest-modules is fundamentally incompatible with testing against a installed package due to module search in checkout vs module usage from site-packages

所以到目前为止,解决方案还不存在。

关于python - 如何让 pytest 在已安装的模块中发现并运行 doctests?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49254777/

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