如何测试Spring @Scheduled

我如何测试我的spring-boot应用程序的Scheduled / cron作业任务?

 package com.myco.tasks;

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

这通常很难。 您可能会考虑在测试期间加载Spring上下文,并从中伪造一些bean来验证调度的调用。

我在Github回购中有这样的例子。 有一个简单的计划例子,用上述方法测试。


如果我们假设您的作业运行时间很短,您确实希望测试等待作业执行,并且您只想测试作业是否被调用,则可以使用以下解决方案:

将等待性添加到类路径中:

<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());
    }
}
链接地址: http://www.djcxy.com/p/28579.html

上一篇: How to test Spring @Scheduled

下一篇: Instantiation time for mutable default arguments of closures in Python