-
30. Spring Batch TestBackEnd/Spring Batch 2022. 1. 14. 18:30반응형
Spring Batch 4.1.x 이상 버전 (Boot 2.1) 기준
의존성 추가 (pom.xml)
<dependency> <groupId>org.springframework.batch</groupId> <artifactId>spring-batch-test</artifactId> <scope>test</scope> </dependency>
@SpringBatchTest
자동으로 ApplicationContext에 테스트에 필요한 여러 유틸 Bean을 등록해 주는 어노테이션
- JobLauncherTestUtils: launchJob(), launchStep()과 같은 스프링 배치 테스트에 필요한 유틸성 메소드 지원
- JobRepositoryTestUtils: JobRepository를 사용해서 JobExecution을 생성 및 삭제 기능 메소드 지원
- StepScopeTestExecutionListener: @StepScope 컨텍스트를 생성해 주며 해당 컨텍스트를 통해 JobParameter 등을 단위 테스트에서 DI 받을 수 있음
- JobScopeTestExecutionListener: @JobScope 컨텍스트를 생성해 주며 컨텍스트를 통해 JobParameter 등을 테스트에서 DI 받을 수 있음
JobLauncherTestUtils
- @Autowired void setJob(Job job) // 실행할 Job을 자동으로 주입 받음, 한 개의 Job만 받을 수 있음 (Job 설정클래스를 한 개만 지정해야 함)
- JobExecution launchJob(JobParameters jobParameters) // Job을 실행시키고 JobExecution을 반환
- JobExecution launchStep(String stepName) // Step을 실행시키고 JobExecution을 반환
JobRepositoryTestUtils
- List<JobExecution> createJobExecutions(String jobName, String[] stepNames, int count) // JobExecution 생성
- void removeJobExecutions(Collection<JobExecution> list) // JobExecution 삭제
SimpleJobTest.java
package io.springbatch.springbatchlecture; import org.junit.After; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.batch.core.*; import org.springframework.batch.test.JobLauncherTestUtils; import org.springframework.batch.test.context.SpringBatchTest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.test.context.junit4.SpringRunner; import java.util.Date; import java.util.List; @SpringBatchTest // JobLauncherTestUtils, JobRepositoryTestUtils 등을 제공하는 어노테이션 @RunWith(SpringRunner.class) @SpringBootTest(classes={SimpleJobConfiguration.class, TestBatchConfig.class}) // @SpringBootTest: 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"); } }
TestBatchConfig.java
package io.springbatch.springbatchlecture; import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Configuration; @Configuration @EnableAutoConfiguration @EnableBatchProcessing // 테스트 시 배치환경 및 설정 초기화를 자동 구동하기 위한 어노테이션 // 테스트 클래스마다 선언하지 않고 공통으로 사용하기 위함 public class TestBatchConfig { }
[참고자료]
반응형'BackEnd > Spring Batch' 카테고리의 다른 글
29. 리스너 (Listener) (0) 2022.01.13 28. 멀티 스레드 프로세싱 (Multi Thread Processing) (0) 2022.01.08 27. Skip & Retry Architect (0) 2022.01.07 26. Retry (0) 2022.01.07 25. Skip (0) 2022.01.06