首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试Spring @Scheduled

如何测试Spring @Scheduled
EN

Stack Overflow用户
提问于 2015-09-01 04:41:25
回答 6查看 48.1K关注 0票数 34

如何在spring-boot应用程序中测试@Scheduled作业任务?

代码语言:javascript
复制
 package com.myco.tasks;

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

回答 6

Stack Overflow用户

发布于 2018-04-20 06:13:06

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

Awaitility添加到类路径:

代码语言:javascript
复制
<dependency>
    <groupId>org.awaitility</groupId>
    <artifactId>awaitility</artifactId>
    <version>3.1.0</version>
    <scope>test</scope>
</dependency>

编写类似以下内容的测试:

代码语言:javascript
复制
@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());
    }
}
票数 35
EN

Stack Overflow用户

发布于 2019-01-18 03:34:02

我的问题是:“你想测试什么?”

如果你的回答是“我想知道Spring在我想要的时候运行我的预定任务”,那么你是在测试Spring,而不是你的代码。这不是你需要进行单元测试的东西。

如果你的答案是“我想知道我的任务配置是否正确”,那么用一个经常运行的任务编写一个测试应用程序,并验证该任务是否在你期望的时间运行。这不是单元测试,但将显示您知道如何正确配置任务。

如果答案是“我想知道我编写的任务是否正确运行”,那么您需要对任务方法进行单元测试。在您的示例中,您希望对work()方法进行单元测试。为此,可以编写一个直接调用任务方法(work())的单元测试。例如,

代码语言:javascript
复制
public class TestMyTask
{
  @InjectMocks
  private MyTask classToTest;

  // Declare any mocks you need.
  @Mock
  private Blammy mockBlammy;

  @Before
  public void preTestSetup()
  {
    MockitoAnnotations.initMocks(this);

    ... any other setup you need.
  }

  @Test
  public void work_success()
  {
    ... setup for the test.


    classToTest.work();


    .. asserts to verify that the work method functioned correctly.
  }
票数 23
EN

Stack Overflow用户

发布于 2015-09-01 05:01:24

这通常是很困难的。您可以考虑在测试期间加载Spring上下文,并从其中伪造一些bean,以便能够验证计划的调用。

I have such example in my Github repo.使用所描述的方法测试了一个简单的预定示例。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32319640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档