在一个函数的单元测试中,该函数输出时间戳,并在其上说主机名和其他值。在单元测试中,如果在预期的输出中添加一些时间戳和主机名,那么它将失败,因为每次调用函数时,函数中的时间戳都会更改,每次在不同的计算机中运行时,主机名都会更改。解决这个问题的方法是什么?谢谢你的意见。
函数输出:
{'datetime': '09-10-2018 23:23:23', 'hostname': 'abc.xyz.com',...} # and it can change every time we run it
当然,这个日期时间和主机名的变化取决于时间和机器
我认为将在单元测试中用于断言等于或断言dictEqual的预期输出:
{'datetime': '09-10-2018 23:23:23', 'hostname': 'abc.xyz.com',...}
其他断言检查是否更适合这种情况?
你应该嘲笑 datetime.now() 调用,无论它发生在哪里,这样创建日期时间总是一些可以在测试期间断言的屏蔽值。
datetime.now()
这是一个常见的需求,因此已经有了一些库支持-我可以推荐 freezegun :
@freeze_time("09-10-2018 23:23:23") def test_something(): data = something() assert data == {'datetime': '09-10-2018 23:23:23', 'hostname': 'abc.xyz.com',...}