PSD( Private-Self-Development )

Spring Batch 테스트 본문

Backend/Spring Batch

Spring Batch 테스트

chjysm 2023. 4. 25. 14:05

스프링 배치 또한 테스트 코드 작성을 지원한다.

알아보자!

 

1.  의존성 추가

<dependency>
	<groupId>org.springframework.batch</groupId>
	<artifactId>spring-batch-test</artifactId>	
</dependency>

 

2. @SpringBatchTest 어노테이션 추가  및 테스트 작성

  • 자동으로 ApplicationContext에 테스트에 필요한 여러 유틸 Bean을 등록해주는 어노테이션
  • JobLauncherTestUtils 
    • launchJob(), launchStep() 과 같은 스프링 배치 테스트에 필요한 유틸성 메소드 지원
  • JobRepositoryTestUtils
    • JobRepository 를 이용하여 JobExecution 을 생성 및 삭제하는 메소드 지원
  • StepScopeTestExecutionListener
    • @StepScope  컨텍스트를 생성해 주며 해당 컨텍스트를 통해 JobParameter 등을 단위테스트에서 DI 받을 수 있다. 
  • JobScopeTestExecutionListener
    • @JobScope 컨텍스트를 생성해 주며 해당 컨텍스트를 통해 JobParameter 등을 단위테스트에서 DI 받을 수 있다. 

 

예시 

// 테스트 설정
@Configuration
@EnableAutoConfiguration
@EnableBatchProcessing // 배치 환경을 자동 설정
public class TestBatchConfig {
}



// 테스트 작성 
@RunWith(SpringRunner.class)
@SpringBatchTest    // 배치 테스트 어노테이션 빈 의존성 주입을 해준다.
@SpringBootTest(classes={SimpleJobConfiguration.class, TestBatchConfig.class}) // Job 설정 클래스 지정, 통합 테스트를 위한 여러 의존성 빈들을 주입 받기 위한 어노테이션
public class SimpleJobTest {

    @Autowired
    private JobLauncherTestUtils jobLauncherTestUtils;

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Test
    public void simple_job_테스트() throws Exception {

        // given
        JobParameters jobParameters = new JobParametersBuilder()
                .addString("requestDate", "20020101")
                .addLong("date", new Date().getTime())
                .toJobParameters();

        // when
//        JobExecution jobExecution = jobLauncherTestUtils.launchJob(jobParameters);
        JobExecution jobExecution = jobLauncherTestUtils.launchStep("step1");

        // then
        Assert.assertEquals(jobExecution.getStatus(), BatchStatus.COMPLETED);
        StepExecution stepExecution = (StepExecution)((List) jobExecution.getStepExecutions()).get(0);

        Assert.assertEquals(stepExecution.getCommitCount(), 11);
        Assert.assertEquals(stepExecution.getWriteCount(), 1000);
        Assert.assertEquals(stepExecution.getWriteCount(), 1000);
    }

    @After
    public void clear() throws Exception {
        jdbcTemplate.execute("delete from customer2");
    }
}

 

 


참조

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B0%B0%EC%B9%98/dashboard