使py.test、coverage和tox协同工作:tests文件夹中的__init__.py



我对toxpy.testcoveragepytest-cov有一个奇怪的问题:当从tox启动带有--cov选项的py.test时,似乎需要tests文件夹中的__init__.py文件,这一点并不明显。

在写这篇文章的时候,我添加了前面提到的tests/__init__.py,已经解决了最初的问题,但到目前为止,我还不完全理解为什么它确实有效或无效,所以我仍然在寻求帮助。请参阅下面的详细信息。

我在SO上发现了一个相关的问题,但这只会让它更加令人困惑,因为答案似乎与我迄今为止的想法相反:`py.test`和`__init__.py`文件

另请参阅此处的官方文档:py.test-良好集成实践(页面底部)。


简化的项目结构:

setup.py
tox.ini
.coveragerc
project/
    __init__.py
    module1.py
    module2.py
    tests/
        __init__.py (optional, an empty file)
        test_module1.py
        test_module2.py

tox.ini:的相关部分

[testenv:check]
commands = py.test --cov=project --cov-report=term
deps =
    pytest
    coverage
    pytest-cov
[pytest]
python_files = test_*.py
norecursedirs = .tox

.coveragerc:的相关部分

[run]
branch = True
omit = project/tests/*

现在,结果:

  • 从项目根目录运行py.test --cov=project --cov-report=term=>无论是否存在tests/__init__.py文件,都要更正覆盖率
  • 没有tests/__init__.pytox -e check=>测试被发现并运行,但我收到警告"Coverage.py warning:No data was collected.",所有模块的覆盖率为0%
  • tox -e checktests/__init__.py=>再次校正覆盖范围

我不清楚为什么tests/__init__.py文件必须在那里(添加这个空文件解决了最初的问题)才能运行tox,但手动运行测试/覆盖率并不重要。有什么想法吗?

在tox.ini中使用--cov {envsitepackagesdir}/<your-package-name>

请参阅:在覆盖范围内使用py.test;不包括进口

我不再使用pytest-cov,而是直接运行coverage。。

还注意到,对于pytest,我确实需要测试目录中的空白__init__.py才能正常工作。这可能是有原因的。

我知道这是几年前的事了,但万一其他人遇到这个。。

相关内容

最新更新