Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何为测试目的模拟系统日期/时间的变化?_Linux_Unit Testing_Testing_Automated Tests - Fatal编程技术网

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

Linux 如何为测试目的模拟系统日期/时间的变化?,linux,unit-testing,testing,automated-tests,Linux,Unit Testing,Testing,Automated Tests,我使用gitlab ci运行我的测试套件,在一个测试中,我想模拟 更改系统日期(例如,转到第二天),以查看 一切正常,例如: redis密钥已删除(TTL) 自更改日期起,某些文件使用新的“运行编号”写入 日期和时间计算正常 为了单元测试的目的,我如何模拟系统日期/时间的变化 编辑:由于我的代码库是用Python编写的,所以我找到并编辑了;前者可能对我的Python代码起作用,而后者更强大,因为它拦截系统调用,因此理论上,如果在应用补丁后启动redis,我可以使用它来测试redis TT

我使用gitlab ci运行我的测试套件,在一个测试中,我想模拟 更改系统日期(例如,转到第二天),以查看 一切正常,例如:

  • 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,我更喜欢测试真实的东西,而不是模仿这个部分。那么您考虑的是集成测试,而不是单元测试。您是对的。我将编辑问题标题,使其更一般