Linux 如何为测试目的模拟系统日期/时间的变化?
我使用gitlab ci运行我的测试套件,在一个测试中,我想模拟 更改系统日期(例如,转到第二天),以查看 一切正常,例如:Linux 如何为测试目的模拟系统日期/时间的变化?,linux,unit-testing,testing,automated-tests,Linux,Unit Testing,Testing,Automated Tests,我使用gitlab ci运行我的测试套件,在一个测试中,我想模拟 更改系统日期(例如,转到第二天),以查看 一切正常,例如: redis密钥已删除(TTL) 自更改日期起,某些文件使用新的“运行编号”写入 日期和时间计算正常 为了单元测试的目的,我如何模拟系统日期/时间的变化 编辑:由于我的代码库是用Python编写的,所以我找到并编辑了;前者可能对我的Python代码起作用,而后者更强大,因为它拦截系统调用,因此理论上,如果在应用补丁后启动redis,我可以使用它来测试redis TT
- redis密钥已删除(TTL)
- 自更改日期起,某些文件使用新的“运行编号”写入
- 日期和时间计算正常
编辑:由于我的代码库是用Python编写的,所以我找到并编辑了;前者可能对我的Python代码起作用,而后者更强大,因为它拦截系统调用,因此理论上,如果在应用补丁后启动redis,我可以使用它来测试redis TTL。您可以覆盖
gettimeofday
和clock\u gettime
以返回您想要的任何时间。但是,这不会影响带超时的pthread waiting函数。您可以覆盖gettimeofday
和clock\u gettime
以返回您想要的任何时间。但是,这不会影响带超时的pthread waiting函数。不从系统中选择日期并从可以通过脚本更改的变量中提供日期如何?不从系统中选择日期并从可以通过脚本更改的变量中提供日期如何?编写(单元)测试套件时,您需要清楚地定义被测系统及其边界。在这种情况下,您的应用程序属于被测系统,而redis不属于
不属于被测系统的东西应该被模仿。对于python,从这里开始:在编写(单元)测试套件时,您需要清楚地定义被测试的系统及其边界。在这种情况下,您的应用程序属于被测系统,而redis不属于
不属于被测系统的东西应该被模仿。对于python,从这里开始:这不适用于我使用的外部软件,如Redis:最好是更改所有应用程序的系统时间,否则对于我自己的代码,我发现我可以使用2个项目(请参见编辑的问题),这不适用于我使用的外部软件,像Redis一样:最好是更改所有应用程序的系统时间,否则对于我自己的代码,我发现了两个可以使用的项目(请参见编辑的问题),我相信“有没有用于此的工具?”会进入主题之外的领域。我认为标题中的问题更适合这篇文章。我相信“有没有一个工具可以实现这一点?”这是一个离题的话题。我认为标题中的问题更适合这篇文章。我的Python项目与redis交互,并在redis键上设置一些TTL——我想在删除一些键后测试我的软件的行为,因为达到了TTL限制。我认为最简单的方法是更改系统日期/时间,事实上python libfaketime为我做到了这一点。您需要在测试套件中模拟redis连接类。如果redis库正确设置了TTL,您的测试套件将只测试应用程序对TTL的反应。明确地说:您的测试套件永远不应该与真实的redis db对话。我不同意,我有一个测试redis db,我更喜欢测试真实的东西,而不是模仿这个部分。那么您考虑的是集成测试,而不是单元测试。您是对的。我将编辑问题标题,使其更通用。我的Python项目与redis交互,并在redis键上设置一些TTL——我想在删除一些键后测试我的软件的行为,因为达到了TTL限制。我认为最简单的方法是更改系统日期/时间,事实上python libfaketime为我做到了这一点。您需要在测试套件中模拟redis连接类。如果redis库正确设置了TTL,您的测试套件将只测试应用程序对TTL的反应。明确地说:您的测试套件永远不应该与真实的redis db对话。我不同意,我有一个测试redis db,我更喜欢测试真实的东西,而不是模仿这个部分。那么您考虑的是集成测试,而不是单元测试。您是对的。我将编辑问题标题,使其更一般