LoginSignup
1
1

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-05-02

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

}

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1