Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用@SpringBootTest验证一个作业是否运行了另一个作业_Java_Spring Boot_Junit_Spring Batch - Fatal编程技术网

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);