是否有一个相当于xfail的覆盖范围?

2024-10-01 11:39:52 发布

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

偶尔我会处理一些我很确定会是边缘情况的情况,但是我想不出会出现这种情况的例子,所以我不能为它提供一个测试用例。我想知道是否有一种方法可以在我的代码中添加一个pragma,这样,如果将来测试中的一些更改意外地开始覆盖这一行,我就会被提醒这个事实(因为这样的意外覆盖将产生所需的测试用例,但可能是作为一个实现细节,使这一行的覆盖变得脆弱)。我想出了一个人为的例子:

mysquare.py中:

def mysquare(x):
    ov = x * x

    if abs(ov) != ov or type(abs(ov)) != type(ov):
        # Always want this to be positive, though why would this ever fail?!
        ov = abs(ov)  # pragma: nocover

    return ov

然后在我的测试套件中,我从以下内容开始:

from hypothesis import given
from hypothesis.strategies import one_of, integers, floats

from mysquare import mysquare

NUMBERS = one_of(integers(), floats()).filter(lambda x: x == x)

@given(NUMBERS)
def test_mysquare(x):
    assert mysquare(x) == abs(x * x)

@given(NUMBERS)
def test_mysquare_positive(x):
    assert mysquare(x) == abs(mysquare(x))

nocover线永远不会被击中,但那只是因为我想不出到达它的方法!然而,在不久的将来,我决定mysquare也应该支持复数,所以我改变了NUMBERS

NUMBERS = one_of(integers(), floats(),
                 complex_numbers()).filter(lambda x: x == x)

现在我突然意外地遮住了这条线,但我没有意识到这一点。有没有像nocover这样的东西更像pytest.xfail——作为一个肯定的断言,该特定行没有被测试覆盖?最好与pytest兼容


Tags: ofintegersfromimportdef情况absone
1条回答
网友
1楼 · 发布于 2024-10-01 11:39:52

Coverage.py还没有这个特性,但它是一个有趣的特性:一个警告,表明标记为notcovered的行实际上已被覆盖。作为一个困难的黑客,你可以做一些事情,比如禁用nocover pragma,收集覆盖的行,并将它们与带有pragma的行号进行比较。。。。哎哟

相关问题 更多 >