从已安装的控制盘记录覆盖范围

2024-05-19 00:21:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似于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

我如何获得覆盖率以报告站点包中的测试已运行,或者获得测试发现以实际运行该测试,而不是在其他地方运行相同的测试


Tags: runpyorgtestsrcapptoxif
1条回答
网友
1楼 · 发布于 2024-05-19 00:21:28

我想出来了。这个问题是因为我错误地思考了coverage如何处理source指令。对于tox直接运行的命令,我需要显式地提供 source

[testenv]
commands = coverage  source '{envsitepackagesdir}/org/app' run  omit 'src/**' -m unittest discover '{envsitepackagesdir}/org/app'

然后,删除[coverage:paths]部分并在[coverage:run]中设置源:

[coverage:run]
source = src/org/app

将使某人能够直接运行coverage run -m pytestpytest cov并在toxenv之外获得准确的覆盖范围。他们不会干涉的

相关问题 更多 >

    热门问题