如何解决在pytest覆盖率报告中,“->”对缺少的行意味着什么?
我正在使用coverage插件(pytest --cov
)运行pytest,在报告中,我得到了以下一行:
Name Stmts Miss Branch BrPart Cover Missing
---------------------------------------------------------
foo.py 5 1 2 1 71% 3->5,5
我知道3-5
表示它错过了3至5行,但我不知道->
是什么意思。从测试逻辑来看,我希望仅报告5
。供参考,这是我使用的代码:
# foo.py
class Test:
def __lt__(self,other):
if type(self) == type(other):
return False
return NotImplemented
# test_foo.py
def test_lt():
test = test()
assert not (test < test)
解决方法
我假设您启用了分支覆盖。基本上,根据链接中的帖子,3-> 5仅表示从第3行跳转到第5行的分支,在您的情况下,它是指此if type(self) == type(other)
为假并直接跳转到{{ 1}}(在您的测试案例中从未发生过)。
此问题的积分,How do I interpret Python coverage.py branch coverage results?
,Coverage收集代码中从一对行(源)到另一行(目标)的转换对。在某些情况下,某些过渡可能会被跳过,例如在条件语句或break statememt中,然后将其视为丢失的分支(或丢失的过渡)。
例如,在您的代码中,可以跳过一个过渡。
if type(self) == type(other):
return False
return NotImplemented
看到从第3行到第5行是不一定发生的过渡,因为在某些情况下if
语句的计算结果不会为False
。因此,由于缺少从第3行到第5行的跳转,分支覆盖范围将将此代码标记为未完全覆盖。
参考文献
分支机构如何运作。 https://coverage.readthedocs.io/en/latest/branch.html#how-it-works
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。