对具有时间戳的函数进行 Python 单元测试

rob*_*djr 1 python datetime unit-testing assertion

在一个函数的单元测试中,该函数输出时间戳并说出主机名以及其他值。在单元测试中,如果我在预期输出中添加一些时间戳和主机名,它将失败,因为每次调用函数时函数的时间戳都会更改,并且每次在不同的计算机中运行时主机名都会更改。解决这个问题的方法是什么?我很感激您的意见。

函数的输出:

{'datetime': '09-10-2018 23:23:23', 'hostname': 'abc.xyz.com',...}
# and it can change every time we run it
Run Code Online (Sandbox Code Playgroud)

但是这个日期时间和主机名当然会根据时间和机器而变化

我想我将在单元测试中使用assertEqual或assertDictEqual的预期输出:

{'datetime': '09-10-2018 23:23:23', 'hostname': 'abc.xyz.com',...}
Run Code Online (Sandbox Code Playgroud)

其他断言检查是否更适合这种情况?

wim*_*wim 5

无论它发生在哪里,您都应该模拟该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',...}
Run Code Online (Sandbox Code Playgroud)