Java 如何使用@SpringBootTest验证一个作业是否运行了另一个作业
我正在Java 如何使用@SpringBootTest验证一个作业是否运行了另一个作业,java,spring-boot,junit,spring-batch,Java,Spring Boot,Junit,Spring Batch,我正在@SpringBootTest中运行批处理作业: @Autowired private JobRunner jobRunner; jobRunner.runNowForTests("X_Job"); 我有一个监听器,在X\u作业完成后运行Y\u作业: class JobFinishedEventListener { @Autowired private JobRunner jobRunner; @Override public void after
@SpringBootTest
中运行批处理作业:
@Autowired
private JobRunner jobRunner;
jobRunner.runNowForTests("X_Job");
我有一个监听器,在X\u作业
完成后运行Y\u作业
:
class JobFinishedEventListener {
@Autowired
private JobRunner jobRunner;
@Override
public void afterJob(JobExecution jobExecution) {
jobRunner.runNow("Y_Job");
}
}
我的@Test
功能正在检查X_作业是否成功完成,如下所示:
assertJobStatus(X_Job_Execution, COMPLETED);
但是,我不知道如何测试Y_Job
是否成功运行,因为我没有对其执行的引用。如何才能做到这一点?除非我遗漏了什么,否则我不明白为什么要使用当前作业的listener#afterJob
运行下一个作业。这在功能上应与以下相同(使用作业启动器中的同步任务执行器):
这种方法允许您获得作业执行的引用,并根据需要添加断言。@MahmoudBenHassine-Hmm,true。但我还是想知道,为了完成这一点,我没有写过这段代码。比如,也许有一种方法可以让所有作业在当前上下文中运行?我有一个侦听器,在X\u作业完成后运行Y\u作业
:有什么理由这样做而不是依次运行两个作业?我不认为在监听器中运行下一个作业#当前作业的后续作业是可行的,但我可能会遗漏一些东西。好的,我将添加一个答案。哇,我们肯定在更改代码。实际上,我从未问过自己它是同步的还是异步的。我只是看到编写代码的人在使用afterJob,我一直认为它是异步的,但事实并非如此。正如你所说,事后工作毕竟是没有必要的。谢谢但是,我没有选择作为接受答案,因为我仍然很好奇如何知道作业是否以当前方法运行。我无法帮助您使用当前方法,因为您没有共享jobRunner.runNow
和jobRunner.runNowForTests
返回的内容(无效类型或作业执行)。即使它返回JobExecution,仍然很难从侦听器访问它并对其进行断言。我的经验法则:如果它很难测试,那么它可能设计得很糟糕(你说你没有写那段代码,很高兴知道你正在改变它)。
JobExecution jobExecution1 = jobLauncher.run(job_x, params_x);
JobExecution jobExecution2 = jobLauncher.run(job_y, params_y);