Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 멀티스레드
- 스레드
- spring cloud
- 디자인 패턴
- thread
- Parallel Old GC
- saga pattern
- zipkin
- Action Pattern
- 스프링 배치
- Spring Boot Actuator
- Spring Cloud Netfilx Eureka
- 타입스크립트
- java 정렬
- Resilinece4j
- Serial GC
- 키클락
- TypeScript
- The law of Demeter
- spring batch
- 사가 패턴
- 생산자 소비자 패턴
- 디자인패턴
- 알고리즘
- 배치
- Java
- 체인 패턴
- JPA
- Transaction Pattern
- MSA
Archives
- Today
- Total
PSD( Private-Self-Development )
Spring Batch 테스트 본문
스프링 배치 또한 테스트 코드 작성을 지원한다.
알아보자!
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
'Backend > Spring Batch' 카테고리의 다른 글
Spring Batch 운영 (0) | 2023.05.02 |
---|---|
Spring Batch 이벤트 리스너 (0) | 2023.04.24 |
Spring Batch 멀티 스레드 프로세싱 (0) | 2023.04.19 |
Spring Batch 반복 및 오류 제어 (0) | 2023.04.17 |
JobBuilder 와 StepBuilder 그리고 배치 상태 종류 (0) | 2023.03.15 |