测试 Java Spring @Scheduled 功能 [重复]

Posted

技术标签:

【中文标题】测试 Java Spring @Scheduled 功能 [重复]【英文标题】:Testing Java Spring @Scheduled functionality [duplicate] 【发布时间】:2020-05-13 20:52:05 【问题描述】:

我有如下的 cron 调度程序:

@Scheduled(cron = "0 0 1 * * *")
@SchedulerLock(name = "PT20M")
public void schedulerSubscriptionsUpdate() 

我正在尝试测试此预定方法的全部功能 - 某种集成测试(包括方法执行的正确性 - 时间)。 你有什么建议我该怎么做?

【问题讨论】:

这能回答你的问题吗? How to test Spring @Scheduled baeldung.com/spring-testing-scheduled-annotation @nodlaw 你解决了吗? 【参考方案1】:

您可以使用为此目的提供的 Awaility 库:

使用 maven 添加该库:

<dependency>
    <groupId>org.awaitility</groupId>
    <artifactId>awaitility</artifactId>
    <version>3.1.6</version>
    <scope>test</scope>
</dependency>

我们可以使用 Awaitility DSL 使我们的测试更具声明性,例如:

@SpringJUnitConfig(ScheduledConfig.class)
public class ScheduledAwaitilityIntegrationTest 

    @SpyBean
    private Counter counter;

    @Test
    public void whenWaitOneSecond_thenScheduledIsCalledAtLeastTenTimes() 
        await()
          .atMost(Duration.ONE_SECOND)
          .untilAsserted(() -> verify(counter, atLeast(10)).scheduled());
    

来源 - baeldung.com/spring-testing-scheduled-annotation

【讨论】:

这是来自baeldung.com/spring-testing-scheduled-annotation的复制粘贴 @elmigue017 - 有时我们必须这样做,这很糟糕, @elmigue017 - 在答案中添加了来源

以上是关于测试 Java Spring @Scheduled 功能 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

java Spring Boot @Scheduled + Spring Security @PreAuthorize = RunAs

java sprinng @Scheduled 定时器注解问题

spring定时任务Scheduled与定时任务线程池配置SchedulingConfigurer ,Java

Java Spring @Scheduled 定时任务crontab表达式设置

在Spring3中使用注解(@Scheduled)创建计划任务

spring boot @Scheduled未生效原因