Python 对具有时间戳的函数进行单元测试
Python unit test for a function that has timestamp
在一个函数的单元测试中,该函数输出时间戳并在其上说出主机名以及其他值。在单元测试中,如果我在预期输出中添加一些时间戳和主机名,它将失败,因为每次调用函数时函数的时间戳都会更改,并且主机名每次在不同机器中为 运行 时都会更改.解决方法是什么?非常感谢您的意见。
函数输出:
{'datetime': '09-10-2018 23:23:23', 'hostname': 'abc.xyz.com',...}
# and it can change every time we run it
但是这个日期时间和主机名当然会根据时间和机器而变化
我认为我将在单元测试中用于 assertEqual 或 assertDictEqual 的预期输出:
{'datetime': '09-10-2018 23:23:23', 'hostname': 'abc.xyz.com',...}
是否有其他一些断言检查更适合这种情况?
您应该模拟 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',...}
在一个函数的单元测试中,该函数输出时间戳并在其上说出主机名以及其他值。在单元测试中,如果我在预期输出中添加一些时间戳和主机名,它将失败,因为每次调用函数时函数的时间戳都会更改,并且主机名每次在不同机器中为 运行 时都会更改.解决方法是什么?非常感谢您的意见。
函数输出:
{'datetime': '09-10-2018 23:23:23', 'hostname': 'abc.xyz.com',...}
# and it can change every time we run it
但是这个日期时间和主机名当然会根据时间和机器而变化
我认为我将在单元测试中用于 assertEqual 或 assertDictEqual 的预期输出:
{'datetime': '09-10-2018 23:23:23', 'hostname': 'abc.xyz.com',...}
是否有其他一些断言检查更适合这种情况?
您应该模拟 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',...}