gpt4 book ai didi

java - 使用 cron 属性在 Spring-boot 中测试 @Scheduled 函数

转载 作者:行者123 更新时间:2023-12-04 16:38:48 29 4
gpt4 key购买 nike

我想测试我的 Cron-job 是否会在给定时间(每年 1 月 1 日 00:00)执行。有没有办法测试这个?
不幸的是,我可以在网上找到的每个示例都指的是将在固定期限后执行的作业,例如全部 5 秒。( https://www.baeldung.com/spring-testing-scheduled-annotation )。

    @Scheduled(cron = " 0 0 1 1 *")
public void myFunc() {
do something
}

最佳答案

好吧,如果您真的想测试执行情况,您将不得不在新年前夕监视应用程序;<)
如果您想测试调度是否已正确设置并且您的任务是否已调度,那么您可以 Autowiring ScheduledStaskHolder 并查询您的任务。
假设这个实现:

package nl.benooms.scheduledannotationplayground;
@Service
public class FixedDateSchedule {
@Scheduled(cron = "0 0 0 1 1 *")
public void OnceAYearCron() {
System.out.println("yearly");
}
}
那么测试可能是:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
class FixedDateScheduleTest {

@Autowired
private ScheduledTaskHolder scheduledTaskHolder;

@Test
public void testYearlyCronTaskScheduled() {
Set<ScheduledTask> scheduledTasks = scheduledTaskHolder.getScheduledTasks();
scheduledTasks.forEach(scheduledTask -> scheduledTask.getTask().getRunnable().getClass().getDeclaredMethods());
long count = scheduledTasks.stream()
.filter(scheduledTask -> scheduledTask.getTask() instanceof CronTask)
.map(scheduledTask -> (CronTask) scheduledTask.getTask())
.filter(cronTask -> cronTask.getExpression().equals("0 0 0 1 1 *") && cronTask.toString().equals("nl.benooms.scheduledannotationplayground.FixedDateSchedule.OnceAYearCron"))
.count();
assertThat(count).isEqualTo(1L);
}
}
如果出现以下情况,测试将失败:
  • @Scheduled 或 @EnableScheduling 未设置
  • cron 表达式不准确
  • 类名和方法名不对应
    请注意,如果不是样本
  • ,我会将测试格式化为更易读的格式。

    关于java - 使用 cron 属性在 Spring-boot 中测试 @Scheduled 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64880738/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com