您可能没有听说过的有用Python库:Freezegun

将时间放在您的Python测试中,您可能没有听说过的有用Python库:Freezegun首先出现在数据科学上。

来源:走向数据科学

测试我们的代码是软件开发生命周期的至关重要的重要组成部分。当我们讨论AI和ML系统时,这也许更为重要,在这种系统中,固有的不确定性和幻觉元素从一开始就可能已经烘烤了。

以及在该一般测试框架内,根据当前日期或时间进行不同行为的测试代码可能是真正的头痛。您如何可靠地检查仅在午夜触发的逻辑,计算相对日期(“ 2小时前”)或处理诸如LEAP年或月末之类的棘手情况?手动嘲笑Python的DateTime模块可能很麻烦且容易出错。

如果您曾经为此而战,那么您并不孤单。但是,如果您可以简单地……停止时间怎么办?甚至在您的测试中穿过它?

这正是Freezegun库让您做的事情。这是解决常见测试问题的优雅解决方案,但是许多经验丰富的Python开发人员从未听说过。

Freezegun允许您的Python测试通过模拟DateTime,日期,时间和摆python模块来及时模拟特定时刻。它易于使用,但功能强大,用于为时间敏感的代码创建确定性和可靠的测试。

freezegun

为什么Freezegun如此有帮助?

  • 确定论。这是Freezegun的主要好处。涉及时间的测试变得完全可以预测。在冷冻块中运行dateTime.now()返回相同的冷冻时间戳,消除了由毫秒差异或测试执行过程中日期滚动引起的片状测试。
  • 确定论。
  • 简单。与手动修补dateTime..now或使用UnitTest.mock相比,Freezegun通常更干净,并且需要更少的样板代码,尤其是在暂时更改时间时。
  • 简单。 dateTime.now unittest.mock 时间旅行。
  • 相对时间测试。通过冻结时间并创建相对于该冷冻矩的时间戳,可以计算相对时间的测试函数(例如,“在3天内到期”)。
  • 相对时间测试。 tick tock。 jupyter笔记本 不是