代码之家  ›  专栏  ›  技术社区  ›  robinhoodjr

具有时间戳的函数的python单元测试

  •  1
  • robinhoodjr  · 技术社区  · 6 年前

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

    函数输出:

    {'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',...}
    

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   wim    6 年前

    你应该嘲笑 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',...}