繁体   English   中英

使用 pytest 和 SonarQube,我如何在 if 语句中覆盖间接无法访问的代码?

[英]Using pytest and SonarQube, How can I cover code in an if statement that circumstantially can't be reached?

问题的说明性简化示例

import datetime

def func(value):
    now = datetime.datetime.now()
    if now.month < 7:
        out = value
    else:
        out = value + 1
    return out

# fails half the year
def test_func():
    a=func(4)
    assert a==4

# works but only covers one half of the branch based on month.
def test_func2():
    a=func(4)
    now = datetime.datetime.now()
    if now.month < 7:
        assert a==4
    else:
        assert a==5

如何创建一个涵盖 if 两个分支的当前日期不可知的单一测试? 我尝试了各种模拟库和修补程序,但成功有限,即使在明显成功的地方,代码覆盖率仍然不完整,大概是因为测试是在模拟对象上进行的。

我对单元测试和 pytest 非常陌生,我认为我要问的问题是,有没有办法以某种方式“覆盖”函数中的值(在这种情况下,“现在”)它可以' t 受函数参数影响,还获得代码覆盖率?

有些库会为您修补 datetime.now,例如 freezegun。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM