微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在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 举报,一经查实,本站将立刻删除。