pytest coverage init类覆盖率中的奇怪行为

时间:2018-12-27 20:42:35

标签: python class code-coverage pytest

我对报告中的覆盖率数据有疑问,不同意。还是仅仅是它的工作方式? 我的例子。 文件functions.py:

class TestClass(object):
    def __init__(self, a, b, c, d):
        self.a = a
        self.b = b
        self.c = c
        self.d = d

文件tests.py:

def testClassInit():
    instance = functions.TestClass(a=1, b=2, c=3, d=4)
    assert instance.a == 1
    assert instance.b == 2

报告显示,functions.py文件中的所有行都被覆盖了,这不是事实,self.c和self.d则不是。

当我这样做时:

def testClassInit():
    instance = functions.TestClass(a=1, b=2, c=3, d=4)
    assert instance.a == 1
    assert instance.b == 2
    assert instance.c == 3
    assert instance.d == 4

覆盖范围是相同的。 sb可以向我解释吗?

顺便说一句。在这种情况下,可以在测试中使用这么多的断言吗?

2 个答案:

答案 0 :(得分:0)

覆盖率报告只是告诉您在测试期间执行了哪些行。因此,在创建该类的实例时,将执行 init ()中的所有四行。

答案 1 :(得分:0)

覆盖率无法衡量您是否拥有正确的主张。它测量是否执行了行。在您的第一个测试中,将执行__init__方法中的所有行。实际上,它们都是在测试的第一行执行的。在这种情况下,断言是无关紧要的。

顺便说一句,一次测试中包含许多断言是可以的,只要它们都是关于单个结果的。