最近,当我从工作服切换到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语句是由解释器完全计算的。那为什么不算一次成功呢?在
这意味着该行有一个分支语句,但其中一个分支从未执行过。在
从下一行中,很明显内容从未提供给该构造函数,因此您从未使用
Struct(content=something)
测试代码。在还请注意,如果不提供参数,
self.content
将不会被设置,因此如果尝试访问,AttributeError
将被引发。在虽然在本例中,您可以从
if
中的语句推断出它是真值相反的,但您看不到条件从来不是false。再考虑一下你的例子,稍微修改一下看起来一切都很好?如果您没有使用分支覆盖,那么
^{pr2}$if
也会说“hit”,而且您不会注意到您从未在content is not None
是False
的情况下测试过代码,这样就会出现不设置self.content
属性的错误:以下程序:运行时,提升:
相关问题 更多 >
编程相关推荐