我有一个类似于Tox 0% coverage的问题,但我确实有一些覆盖范围。我的运行时代码被覆盖,但我的测试代码没有被覆盖。我构建了an example app来重现这个问题
Name Stmts Miss Cover
------------------------------------------------------------------------------------
.tox/py38/lib/python3.8/site-packages/org/app/__init__.py 0 0 100%
.tox/py38/lib/python3.8/site-packages/org/app/app.py 2 0 100%
.tox/py38/lib/python3.8/site-packages/org/app/test/__init__.py 0 0 100%
.tox/py38/lib/python3.8/site-packages/org/app/test/test_it.py 5 5 0%
------------------------------------------------------------------------------------
TOTAL 7 5 29%
一种假设可能是unittest实际上只运行src/org/app/test/test_it.py
,而从不运行.tox/py38/lib/python3.8/site-packages/org/app/test/test_it.py
。但是unittest命令是coverage run --omit 'src/**' -m unittest discover '{envsitepackagesdir}/org/app'
,我希望它能使discovery在site packages目录中查找测试。以下是整个tox.ini:
[tox]
envlist = py38
[testenv]
deps = coverage
commands_pre = coverage erase
download = true
commands = coverage run --omit 'src/**' -m unittest discover '{envsitepackagesdir}/org/app'
commands_post = coverage report
[coverage:run]
source_pkgs = org.app
[coverage:paths]
source =
${TOX_ENV_DIR-src}/org/app
src/org/app
[coverage:report]
exclude_lines =
def __repr__
if 0:
if TYPE_CHECKING:
if __name__ == .__main__.:
if self.debug:
if settings.DEBUG
pragma: no cover
raise AssertionError
raise NotImplementedError
我如何获得覆盖率以报告站点包中的测试已运行,或者获得测试发现以实际运行该测试,而不是在其他地方运行相同的测试
我想出来了。这个问题是因为我错误地思考了
coverage
如何处理source
指令。对于tox直接运行的命令,我需要显式地提供source
:然后,删除
[coverage:paths]
部分并在[coverage:run]
中设置源:将使某人能够直接运行
coverage run -m pytest
或pytest cov
并在toxenv之外获得准确的覆盖范围。他们不会干涉的相关问题 更多 >
编程相关推荐