繁体   English   中英

使py.test,coverage和tox一起工作:__ init__.py在tests文件夹中?

[英]Making py.test, coverage and tox work together: __init__.py in tests folder?

我有一个奇怪的问题toxpy.testcoveragepytest-cov :当py.test--cov选项是从启动tox ,它似乎需要一个__init__.py在文件tests文件夹这是不是很明显。

在撰写这篇文章时,我通​​过添加上述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 from project root =>正确覆盖是否存在tests/__init__.py文件。
  • tox -e check without without tests/__init__.py =>测试被发现并运行,但我收到警告“Coverage.py警告:没有收集数据。” 并且所有模块的覆盖率均为0%
  • tox -e check tests/__init__.py =>再次正确覆盖。

对于我来说,为什么tests/__init__.py文件必须存在(添加此空文件解决了初始问题)对于tox运行并不是很明显,但是当您手动运行tests / coverage时无关紧要。 有任何想法吗?

--cov {envsitepackagesdir}/<your-package-name>使用--cov {envsitepackagesdir}/<your-package-name>

请参阅: 使用带覆盖的py.test不包括导入

我摆脱了使用pytest-cov并直接运行coverage ..

还注意到pytest ,我确实需要在我的测试目录中使用空白__init__.py才能正常运行。 在某个地方可能有一个原因。

我意识到这已经有几年了,但万一有人遇到这个......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM