【问题标题】:How to make an application with scheduler (Quartz) manually testable?如何使具有调度程序(Quartz)的应用程序可手动测试?
【发布时间】:2011-09-10 04:16:39
【问题描述】:

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

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

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

  1. Quartz 是否可以伪造当前日期?
  2. 如果不是,您是如何设计这个“测试人员的神奇时间按钮”的,它将应用程序带入未来?尤其是关于计划任务...

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

【问题讨论】:

  • 感谢 bpgergo - 实际上我已经看过了。显然,Quartz 中有一个用于时间提供程序的 SPI,现在已弃用(并且未使用)。弄乱正在运行的调度程序的时间是有问题的,这是可以理解的,但是如果通过重新启动调度程序来仔细处理它应该没问题。

标签: java testing quartz-scheduler scheduler


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您唯一真正的选择是在启动调度程序之前提前系统时间。

    【讨论】:

    • 如果你在运行时提前了时间,你会得到奇怪的结果。 (实际上,可能并不太奇怪 - 可能只是导致很多触发器失火处理等)。
    • 提高系统时间也可能导致很多失火处理,但这正是我想要的。我很感激一个不需要弄乱系统时间的解决方案,因为它并不完全在应用程序的控制之下......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    相关资源
    最近更新 更多