java - 如何测试 Spring @Scheduled

标签 java spring junit spring-boot mockito

我如何测试 @Scheduled我的 spring-boot 应用程序中的工作任务?

 package com.myco.tasks;

 public class MyTask {
     @Scheduled(fixedRate=1000)
     public void work() {
         // task execution logic
     }
 }

最佳答案

如果我们假设您的作业以如此小的间隔运行,您真的希望您的测试等待作业被执行并且您只想测试是否调用了作业,您可以使用以下解决方案:

添加 Awaitility到类路径:

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

编写类似的测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {

    @SpyBean
    private MyTask myTask;

    @Test
    public void jobRuns() {
        await().atMost(Duration.FIVE_SECONDS)
               .untilAsserted(() -> verify(myTask, times(1)).work());
    }
}

关于java - 如何测试 Spring @Scheduled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32319640/

相关文章:

java - Spring 依赖注入(inject)停止工作

java - Spring 数据 Cassandra @Indexed 注解

xml - 有没有办法在 Jenkins 中为 JUnit 测试结果定义 "number of builds"?

带有复选框的 Java 嵌套 JPanel

java - 组合上下文:property-override and PropertyPlaceholderConfigurer

java - 这是将可选数据结构组合成值对象的最佳方式吗?

java - 我正在尝试为插入时间表的方法编写一个 JUnit 测试用例,该时间表将参数作为员工 ID。我应该如何尝试?

java - Intellij Idea 可以配置为在发生 JUnit AssertionError 时中断吗?

java - 将 Json 解析为 Java 对象

java - 无法从java代码执行终端命令