如何为测试目的模拟系统日期/时间的变化?

时间:2019-03-01 17:25:56

标签: linux unit-testing testing automated-tests

我使用gitlab-ci运行测试套件,在一个测试中,我想模拟一个 更改系统日期(例如,到第二天)以查看是否 一切都会按预期进行,例如:

  • redis键已删除(TTL)
  • 自更改日期以来,某些文件写入了新的“运行号”
  • 日期和时间计算没问题
  • ...

如何出于单元测试目的模拟系统日期/时间的更改?


编辑:由于我的代码库是Python,因此我发现了freezegunpython-libfatketime;前者可能可以解决我的Python代码问题,而后者则更强大,因为它可以拦截系统调用,因此从理论上讲,如果在应用补丁后启动Redis,我可以将其用于测试Redis TTL。

3 个答案:

答案 0 :(得分:0)

您可以覆盖gettimeofdayclock_gettime返回所需的任何时间。但是,这不会影响带有超时的pthread等待功能。

答案 1 :(得分:0)

不从系统中选择日期并从可以通过脚本更改的变量中提供日期如何?

答案 2 :(得分:0)

在编写(单元)测试套件时,您需要明确定义被测系统及其边界。在这种情况下,您的应用程序属于被测系统,redis则不属于该系统。

不属于被测系统的事物应该被嘲笑。对于python,请从此处开始:https://docs.python.org/3/library/unittest.mock.html