测试 Quartz CronTrigger 触发器
假设我有一个 CronTriggerBean
,类似于
<bean id="midMonthCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="reminderJobDetail" />
<property name="cronExpression" value="0 0 6 15W * ?" />
</bean>
What is the best way to test that this bean will 实际上在其指定日期触发,即在最接近每个日期 15 号的工作日一个月早上 6 点?
更新:这应该是一个单元测试,所以我不会启动虚拟机或更改系统时间。
Assuming that I have a CronTriggerBean
similar to
<bean id="midMonthCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="reminderJobDetail" />
<property name="cronExpression" value="0 0 6 15W * ?" />
</bean>
What is the best way to test that this bean will actually trigger at its specified date, i.e. on the weekday closest to the 15th of each month at 6 AM?
Update: This is supposed to be an unit test, so I'm not going to fire up a VM or change the system time.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
首先,测试 CronTriggerBean 本身是没有意义的。 它是 spring 框架的一部分,并且已经经过测试。
更好的测试可能是测试您的 cron 表达式是否符合您的预期。 这里的一种选择是使用 Quartz 的 CronExpression 类。 给定一个
CronExpression
对象,您可以调用getNextValidTimeAfter(Date)
,它返回给定 Date 后触发表达式的下一个时间。Well firstly, there's no point in testing
CronTriggerBean
itself. It's part of the spring framework, and has already been tested.A better test might be to test that your cron expression is what you expect. One option here is to use Quartz's
CronExpression
class. Given aCronExpression
object, you can callgetNextValidTimeAfter(Date)
, which returns the next time after the given Date when the expression will fire.我使用 CronMaker 只是为了确定我的 cron 表达式是否格式正确,请检查一下:
http://www.cronmaker.com/
I used CronMaker only to be sure if my cron expression is well formed, check it out:
http://www.cronmaker.com/
对于那些不使用 Quartz 调度程序,而是直接使用
TaskSchedular
的人:For those who don't use the Quartz scheduler, but instead use the
TaskSchedular
directly:您还可以从 spring 获取触发器 bean 并调用 getFireTimeAfter 方法来完成。
You also can get the trigger bean from spring and invoke the
getFireTimeAfter
method to finish.我在这里找到了一个关于测试 CronExpression 的很酷的文档:
http://www.nurkiewicz.com/2012/10/testing -quartz-cron-expressions.html
C# 实现将如下所示:
这是一个很酷的演示。 但最后,我结束了使用简单时间表。
因为这是立即执行的,然后每 x 次执行一次。
I found a cool documentation here about testing the
CronExpression
:http://www.nurkiewicz.com/2012/10/testing-quartz-cron-expressions.html
The C# implementation will be something like this:
This is a cool demo. But at the end, I end using Simple Schedule.
Because this is executed immediately and then every x time.