Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.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
Java 如何使具有调度程序(Quartz)的应用程序可手动测试?_Java_Testing_Quartz Scheduler_Scheduler - Fatal编程技术网

Java 如何使具有调度程序(Quartz)的应用程序可手动测试?

Java 如何使具有调度程序(Quartz)的应用程序可手动测试?,java,testing,quartz-scheduler,scheduler,Java,Testing,Quartz Scheduler,Scheduler,我们正在构建一个金融应用程序,其中包含大量的计划处理。我们希望使应用程序的手动测试变得简单,但是由于大多数过程需要几个月才能完成,我们需要给测试人员一个选择,将当前日期提前 为我们所有的业务服务伪造当前日期不是问题,因为它们都通过“TimeService”间接访问日期。我们遇到的问题是调度程序(Quartz)。不可能将调度程序的当前日期移到未来(也不可能移到过去,但这没有多大意义)。我知道在调度程序运行时弄乱它的当前时间可能不是最好的主意,但是如果您可以使用相对于当前日期的偏移时间间隔启动调度程

我们正在构建一个金融应用程序,其中包含大量的计划处理。我们希望使应用程序的手动测试变得简单,但是由于大多数过程需要几个月才能完成,我们需要给测试人员一个选择,将当前日期提前

为我们所有的业务服务伪造当前日期不是问题,因为它们都通过“TimeService”间接访问日期。我们遇到的问题是调度程序(Quartz)。不可能将调度程序的当前日期移到未来(也不可能移到过去,但这没有多大意义)。我知道在调度程序运行时弄乱它的当前时间可能不是最好的主意,但是如果您可以使用相对于当前日期的偏移时间间隔启动调度程序,这应该没有逻辑问题-Quartz应该只找到所有错过的执行,并根据配置的失火指令处理它们

因此,在这个一般设计问题中要更具体一点:

  • 有可能伪造石英的当前日期吗
  • 如果不是,您是如何设计这个“测试人员的神奇时间按钮”的,它将应用程序带到未来的?特别是关于预定的任务

  • 只是想澄清一下——我们的自动测试没有问题(不需要调度程序)我们不想测试调度器本身。

    您唯一的实际选择是在启动调度器之前提前系统时间。

    我只想强调一下我们最终为其他可能感兴趣的人实施的解决方案。最后,我们在开发环境中根本没有使用石英。调度器仅在生产配置中运行(显然不可能改变时间)。然后,我们有一段特殊的代码,它在转换时间时为每天启动日常处理(这只存在于开发/测试环境中)


    我们的底线是:不要试图将调度器与将时间移到未来相结合-使用一个或另一个特殊逻辑创建单独的配置,以替换无调度器配置中的调度器。

    请看一看,谢谢bpgergo-我实际上已经看到了这一点。很明显,Quartz中有一个SPI for time provider,现在已被弃用(且未使用)。可以理解的是,扰乱运行计划程序的时间是有问题的,但如果在重新启动计划程序时小心处理,应该可以。如果在计划程序运行时提前时间,则会得到奇怪的结果。(实际上,可能不太奇怪-可能只是导致大量的触发失火处理等)。提前系统时间也可能导致大量的失火处理,但这正是我想要的。我希望有一个解决方案,不需要弄乱系统时间,因为它不完全在应用程序的控制之下。。。