我对,和:有一个奇怪的问题tox
,当从 启动该选项时,它似乎需要文件夹中的一个文件,这不是立即显而易见的。py.test
coverage
pytest-cov
py.test
--cov
tox
__init__.py
tests
在写这篇文章时,我已经通过添加上述内容解决了最初的问题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
无论文件是否存在,从项目根目录运行 => 正确覆盖。tox -e check
没有tests/__init__.py
=> 测试被发现并运行,但我收到警告“Coverage.py 警告:未收集数据。” 所有模块的覆盖率为 0%tox -e check
tests/__init__.py
=> 再次正确覆盖。
对我来说,为什么tests/__init__.py
文件必须在那里(添加这个空文件解决了最初的问题)以进行tox
运行并不是很明显,但是当您手动运行测试/覆盖时并不重要。有任何想法吗?