我使用gitlab-ci运行我的测试套件,在一个测试中,我想模拟一个更改系统日期(例如,去第二天),以查看是否是否一切都按预期工作,例如:
- redis键已删除(TTL)
- 一些文件以新的"运行号码"编写,因为该日期已更改
- 日期和时间计算还可以
- ...
如何模拟单位测试目的的系统日期/时间更改?
编辑:由于我的代码库在Python,因此我找到了Freezegun和Python-libfatketime;前者可能可以为我的python代码做一个技巧,而后者则更强大,因为它正在拦截系统调用,因此从理论上讲,如果我在应用补丁后启动redis,我可以将其用于测试redis ttl。
您可以随时返回gettimeofday
和clock_gettime
。但是,这不会影响pthread等待功能。
如何不从系统中选择日期并提供可以通过脚本更改的变量的日期?
编写(单元)测试套件时,您需要清楚地定义正在测试的系统及其边界。在这种情况下,您的应用程序属于正在测试的系统中,Redis不属于。
不属于正在测试的系统的事物应被模拟。对于Python开始:https://docs.python.org/3/library/unittest.mock.html