Con*_* Ma 6 python testing doctest pytest tox
我正在添加单元测试和一种“传统”Python 包。一些模块包含嵌入在 docstrings 中的自己的 doctests。我的目标是运行这些文档测试和新的专用单元测试。
下面这个Q&A(“如何让py.test运行文档测试以及正常的测试目录?”)我使用的--doctest-modules选项pytest。当从源存储库运行时,pytest确实从src目录下的 Python 模块中发现了嵌入的 doctests 。
但是,我的目标是测试源发行版是否完全构建和安装,然后针对已安装的包测试所有内容。为此,我正在使用toxwhich 自动构建sdist(源代码分发)tarball 的过程,将其安装在虚拟环境中,并针对已安装的版本运行测试。为了确保它是已安装的版本,而不是源存储库中由测试导入的版本,我遵循本文中的建议,存储库现在如下所示:
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
Run Code Online (Sandbox Code Playgroud)
(下面的测试脚本tests将包导入为 in 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
Run Code Online (Sandbox Code Playgroud)
到目前为止,测试运行良好,并且 doctests 是从 下的模块中提取的src/my_package,而不是从安装在tox虚拟环境中的包中提取的。
我与此设置相关的问题如下:
tox似乎确保您安装的是源存储库中的内容,但是是吗?pytest以一种干净的方式从已安装的模块实际运行 doctests?我可以想到一些解决方案,例如在doc目录中构建专用文档树,然后pytest使用--doctest-glob选项在其中找到 doctests 。但是有没有一种方法可以在不首先构建文档的情况下做到这一点?| 归档时间: |
|
| 查看次数: |
1494 次 |
| 最近记录: |