0
Help us understand the problem. What are the problem?

posted at

updated at

SpringBatchのJunitテストの書き方(Step構成がJavaで書いた場合)

SpringBatchの公式ドキュメントを参考して、JunitでSpringBatchのテストをやって見たが、Step構成ファイルがjavaファイルで書いた場合、「@ContextConfiguration」でStep構成ファイルを指定するとエラーがいろいろ出ました。
解決方法を調べたが、Step構成ファイルの作成がいくつ注意点があることがわかりました。

サンプルコード

Configuration.java
@Configuration
@EnableBatchProcessing
//注意点1:@ComponentScanを追加し、全プロジェクトのBeanをスキャンすること
@ComponentScan("com.example.パス") 
public class Configuration{

  @Autowired
  private JobBuilderFactory jobBuilderFactory;

  @Autowired
  private StepBuilderFactory stepBuilderFactory;

  @Autowired
  private Step010 step010;

  @Bean
  public Step step1() {
    return stepBuilderFactory.get("step1")
        .tasklet(step010)
        .build();
  }

  @Bean
//注意点2:@QualifierでBeanを強く特定すること
  public Job job(@Qualifier("step1") Step step1) throws Exception {
    return this.jobBuilderFactory.get("job")
        .start(step1)
        .build();
  }
}
SpringBatchApplicationTests.java
@SpringBatchTest
@RunWith(SpringRunner.class)
//注意点3:@ContextConfigurationではBeanをうまく特定できないそうで、@SpringBootTestを使う
@SpringBootTest(classes = { Configuration.class })
public class SpringBatchApplicationTests {

  @Autowired
  private JobLauncherTestUtils jobLauncherTestUtils;

  // Jobテスト
  @Test
  public void testJob() throws Exception {
    // launchJobでJob全体を実行する
    JobExecution jobExecution = this.jobLauncherTestUtils.launchJob();
    //実行結果と予想値と比較
    Assert.assertEquals("COMPLETED", jobExecution.getExitStatus().getExitCode());
  }
  // Stepテスト
  @Test
  public void testStep1() throws Exception {
    // テストしたいStep名を引数に指定する、Step名は@Qualifierで指定したStep名と一致すること
    JobExecution jobExecution = this.jobLauncherTestUtils.launchStep("step1");
    Assert.assertEquals("COMPLETED", jobExecution.getExitStatus().getExitCode());
  }

}

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?