我们正在构建一个具有大量计划处理的财务应用程序。我们希望简化应用程序的手动测试,但由于大多数过程需要数月才能完成,因此我们需要为测试人员提供将当前日期提前的选项。
为我们所有的业务服务伪造当前日期不是问题,因为它们都通过“TimeService”间接访问日期。我们遇到的问题是调度程序(Quartz)。不可能将调度程序的当前日期移到 future (也不可能过去,但这没有多大意义)。我知道在调度程序运行时弄乱它的当前时间可能不是最好的主意,但是如果你可以用相对于当前日期的偏移时间间隔启动调度程序,那应该没有逻辑问题 - Quartz 应该会发现所有遗漏的执行并根据配置的失火指令处理它们。
所以在这个一般设计问题中更具体一点:
- 是否可以伪造 Quartz 的当前日期?
- 如果不是,您是如何设计这个将应用程序带向 future 的“测试人员魔法时间按钮”的?特别是关于计划任务...
明确一点 - 我们的自动测试没有问题(那里不需要调度程序),我们也没有尝试测试调度程序本身。
最佳答案
我将重点介绍我们最终为可能感兴趣的其他人实现的解决方案。最后,我们在开发环境中根本没有使用Quartz。调度程序仅在生产配置中运行(显然不可能转移时间)。然后我们有一段特殊的代码,在转移时间时每天启动每日处理(仅存在于开发/测试环境中)。
我们的底线是:不要尝试将调度器和移动时间结合到 future - 创建单独的配置,其中一个异或另一个具有特殊逻辑以替换无调度器配置中的调度器。
关于java - 如何使带有调度程序(Quartz)的应用程序可手动测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6267410/