2017-02-15 15 views
0

私は2つのステップを実行する1つのジョブで春バッチアプリケーションを使用しています。私は、それぞれのステップを個別にテストすることができるようにしたいと思います。これは可能ですか?私のコードは次の通りです:Spring Batchで他のものを実行せずに1つのステップをテストするにはどうすればいいですか?

@Bean 
public Job job() throws Exception { 
    return jobs.get("job") 
      .incrementer(new RunIdIncrementer()) 
      .listener(new JobCompletionNotificationListener()) 
      .start(A) 
      .next(B) 
      .build(); 
} 


@Test 
public void testStepA() { 
    JobExecution execution = launcher.launchStep("A"); 
    assertEquals(BatchStatus.COMPLETED, execution.getStatus()); 
} 

しかし、私が上のテストを実行すると、それは本質的に起動し、私の仕事全体を前から後に実行します。

答えて

0

JUnitテストケースを実行していると仮定すると、JobLauncherTestUtilsを使用して特定のステップを起動できます。また、MetaDataInstanceFactoryを介してExecutionContextインスタンスを作成し、JobLauncherTestUtils.launchStep()メソッドに渡す必要があります。

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration({"classpath:/batch/test-job.xml" }) 
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, StepScopeTestExecutionListener.class }) 
public class StepTest { 
    @Autowired 
    private JobLauncherTestUtils jobLauncherTestUtils; 
    private JobExecution jobExecution; 
    public ExecutionContext getExecutionContext() { 
     return MetaDataInstanceFactory.createJobExecution().getExecutionContext(); 
    } 

    @Test 
    @DirtiesContext 
    public void testStep() { 
     ExecutionContext executionContext = getExecutionContext(); 
     jobExecution = jobLauncherTestUtils.launchStep(<STEP_NAME>, <JOB_PARAMS>, executionContext); 
    } 
} 

関連する問題