我正在处理一个生成覆盖率的问题,它不能像预期的那样工作。最后我发现它与pydevd(PyDev调试器)包。
要重现我的问题,您可以使用以下repo:cov-project
只有两个文件。1英寸my_package
使用
import pydevd # Just for the purpose to show the problem
def sum(num1, num2):
return num1 + num2
def mult(num1, num2):
return num1 * num2
和测试文件test_math.py
在测试中:
from my_package.math import sum, mult
def test_sum():
assert sum(1, 2) == 3
def test_mult():
assert mult(2, 3) == 6
当我删除import pydevd
从第一个文件开始运行python -m pytest --cov=my_package tests
我得到以下输出:
Name Stmts Miss Cover
--------------------------------------------
my_package/__init__.py 0 0 100%
my_package/math.py 4 0 100%
--------------------------------------------
TOTAL 4 0 100%
是的,100%的覆盖率与预期不谋而合。但是当我运行相同的程序并继续导入时pydevd
我得到了:
Name Stmts Miss Cover
--------------------------------------------
my_package/__init__.py 0 0 100%
my_package/math.py 5 4 20%
--------------------------------------------
TOTAL 5 4 20%
测试是完全相同的,唯一的变化是这个额外的导入。当然,在这个设置中pydevd
是未使用的,我可以简单地删除它。但是我在我的专有代码中使用了它,所以我想展示如何以最简单的方式重现我的错误,因为在使用pydevd
..。我可以将它更改为本地导入,因为我在测试中不使用它,然后它就可以工作了,但我正在尝试理解这里发生了什么以及为什么要这样做pydevd
阻止覆盖范围成功生成报告。
已测试
发布于 2021-02-27 12:09:15
这真的是一个bugpydevd
..。
我已经把它修好了
https://github.com/fabioz/PyDev.Debugger/commit/be32cd821f2574566385deeec23081365bf16722
同时,您可以将相同的修复程序应用于您的本地版本。
要查找用于修复的文件,您可以执行以下操作:
import pydevd
from _pydevd_bundle import pydevd_constants
print(pydevd_constants.__file__)
https://stackoverflow.com/questions/66382210
复制