[英]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.