在 pytest 覆盖率报告中,“->”对于缺失行意味着什么?

a_g*_*est 5 python pytest pytest-cov

我正在使用覆盖率插件(pytest --cov)运行 pytest,并在报告中得到以下行:

Name          Stmts   Miss Branch BrPart  Cover   Missing
---------------------------------------------------------
foo.py            5      1      2      1    71%   3->5, 5
Run Code Online (Sandbox Code Playgroud)

我知道这3-5意味着它错过了第 3 行到第 5 行,但我不知道是什么->意思。从测试逻辑来看,我预计只会5被报告。作为参考,这是我使用的代码:

Name          Stmts   Miss Branch BrPart  Cover   Missing
---------------------------------------------------------
foo.py            5      1      2      1    71%   3->5, 5
Run Code Online (Sandbox Code Playgroud)

Mig*_*ejo 4

覆盖范围收集代码中从一行(源)到另一行(目标)的转换对。在某些情况下,某些转换可能会被跳转,例如在条件语句或中断语句中,然后它将被测量为缺失分支(或缺失转换)。

例如,在您的代码中存在一个可以跳转的转换。

if type(self) == type(other):
       return False
   return NotImplemented
Run Code Online (Sandbox Code Playgroud)

看到从第 3 行到第 5 行是一个不一定会发生的转换,因为可能存在该if语句不计算为的情况False情况。因此,由于缺少从第 3 行到第 5 行的跳转,分支覆盖率会将这段代码标记为未完全覆盖。

参考

分支机构覆盖如何运作。https://coverage.readthedocs.io/en/latest/branch.html#how-it-works