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

标签 java testing quartz-scheduler scheduler

我们正在构建一个具有大量计划处理的财务应用程序。我们希望简化应用程序的手动测试,但由于大多数过程需要数月才能完成,因此我们需要为测试人员提供将当前日期提前的选项。

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

所以在这个一般设计问题中更具体一点:

  1. 是否可以伪造 Quartz 的当前日期?
  2. 如果不是,您是如何设计这个将应用程序带向 future 的“测试人员魔法时间按钮”的?特别是关于计划任务...

明确一点 - 我们的自动测试没有问题(那里不需要调度程序),我们也没有尝试测试调度程序本身。

最佳答案

我将重点介绍我们最终为可能感兴趣的其他人实现的解决方案。最后,我们在开发环境中根本没有使用Quartz。调度程序仅在生产配置中运行(显然不可能转移时间)。然后我们有一段特殊的代码,在转移时间时每天启动每日处理(仅存在于开发/测试环境中)。

我们的底线是:不要尝试将调度器和移动时间结合到 future - 创建单独的配置,其中一个异或另一个具有特殊逻辑以替换无调度器配置中的调度器。

关于java - 如何使带有调度程序(Quartz)的应用程序可手动测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6267410/

相关文章:

android - 非常基本的 LoaderTestCase 卡在 getLoaderResultSynchronously 中

ruby - capybara rspec 脚本未在描述 block 中执行

mysql - 出现错误无法执行语句 : impossible to write to binary log since BINLOG_FORMAT = STATEMENT

jakarta-ee - Quartz 不参与 EJB 事务(在 CMT 模式下)

java - 在声明后填充数组成员

java - Hibernate JPA 等于 POJO

ios - 同时在 iPhone 上安装 iOS 应用程序的生产和开发版本

java - IBM MQ 发布/订阅向一个订阅者发送消息

java - HashMap 给出一个无序列表的值?

java - 从 Quartz 作业调用 EJB