什么是代码覆盖率的部分命中率?

2024-04-29 19:53:18 发布

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

最近,当我从工作服切换到Codecov时,我的项目覆盖率下降了几个百分点。这似乎是由于部分命中,这在工作服中被视为命中,但在Codecov中被视为未命中。在

下面是一个代码示例:

class Struct(object):                  # hit
    def __init__(self, content=None):  # hit            
        if content is not None:        # partial hit
            self.content = content     # missed

s = Struct()                           # hit

在我看来,if语句是由解释器完全计算的。那为什么不算一次成功呢?在


Tags: 项目代码selfcodecovnone示例ifobject
1条回答
网友
1楼 · 发布于 2024-04-29 19:53:18

这意味着该行有一个分支语句,但其中一个分支从未执行过。在

从下一行中,很明显内容从未提供给该构造函数,因此您从未使用Struct(content=something)测试代码。在

还请注意,如果不提供参数,self.content将不会被设置,因此如果尝试访问,AttributeError将被引发。在


虽然在本例中,您可以从if中的语句推断出它是真值相反的,但您看不到条件从来不是false。再考虑一下你的例子,稍微修改一下

class Struct(object):                  # hit
    def __init__(self, content=None):  # hit            
        if content is not None:        # partial hit
            self.content = content     # hit

    def print_content(self):           # hit
        print(self.content)            # hit

s = Struct('42')                       # hit
s.print_content()                      # hit

看起来一切都很好?如果您没有使用分支覆盖,那么if也会说“hit”,而且您不会注意到您从未在content is not NoneFalse的情况下测试过代码,这样就会出现不设置self.content属性的错误:以下程序:

^{pr2}$

运行时,提升:

Traceback (most recent call last):
  File "foo.py", line 10, in <module>
    s.print_content()
  File "foo.py", line 7, in print_content
    print(self.content)
AttributeError: 'Struct' object has no attribute 'content'

相关问题 更多 >