我有一个奇怪的问题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
从项目root =>正确覆盖运行tests/__init__.py
文件是否存在.
tox -e check
没有tests/__init__.py
=>测试被发现并运行,但我收到警告"Coverage.py警告:没有收集数据." 并且所有模块的覆盖率均为0%
tox -e check
with tests/__init__.py
=>再次正确覆盖.
对于我来说,为什么tests/__init__.py
文件必须存在(添加此空文件解决了初始问题)并不是很明显tox
,但是当您手动运行测试/覆盖时无关紧要.有任何想法吗?
谢谢.
--cov {envsitepackagesdir}/<your-package-name>
在tox.ini中使用.