Junit과 Mockito를 사용한 단위 테스트
특징
- 단일 테스트: 단하나를 테스트한다. 단위테스트의 범위는 하나의 메서드다.
- 격리: 의존성은 시스템을 테스트하는 데 혼란을 줄 수 있다. 각 의족성의 통합을 테스트 하는 것이 아닌 개별 컴포넌트의 동작 방식을 테스트한다.
- 반복 가능한 방식: 브라우저를 띄워 애플리케이션을 매번 반복 클릭하는 것은 번거롭고 어려운 일이다. 단위 테스트는 동일한 시나리오를 반복해서 수행할 수 있어야 한다.
Junit
- 자바로 된 프레임워크를 테스트하는 프레임워크
- 클래스의 단위 테스트를 할 수 있는 기능을 제공
Mock
- 테스트하기 어려운 외부 의존성을 대체해 비지니스 로직 테스트에 집중할 수 있도록 도와주는 도구
- Stub과 다른 도구로 스텁은 하드코딩된 구현체로, 런타임 시에 필요한 동작을 정의할 수 있는 목객체가 재사용 가능한 구조인 경우에 해당된다.
- 프록시 기반 방식
- 의존객체를 프록시 객체로 대체해 테스트 클래스에 주입하는 방식
- 객체 생성을 의존성을 가지는 메인 컴포넌트에서 하지 않아야 한다.
- 클래스 재매핑
스프링 클래스를 사용해 통합 테스트하기
다른 여러 컴포넌트 간의 상호작용이 정상적으로 수행되는지 테스트는 것
Job/Step 테스트하기
- StepScope가 없는 테스트
- 스프링 컨텍스트와 batch job에서 사용하고 있는 의존성에 관련한 context만 추가해서 테스트가능하다.
- StepScope가 설정되어있지 않은 Step의 구성품을 테스트할때는 @SpringBatchTest 설정없이 테스트 가능하다.
- StepScope가 선언된 구성품 테스트
- JobParameter는 JobScope 혹은 StepScope가 있는 환경에서만 사용할 수 있다보니 스프링 컨택스트만으로 테스트가 불가하다.
- StepScope는 Step의 실행시점에 해당 컴포넌트를 Spring Bean으로 생성한다.
- StepScope가 선언되어 있는 환경을 테스트하려면 step이 실행하는 것처럼 컨택스트를 생성해야한다.
- Spring batchd에서는 이걸 해결하기 위해 StepScopeTestExecutionListener를 제공한다.
- Step StepExecution을 제공하는 메서드(getStepExecution)를 정의하면 StepScopeTestExecutionListener는 해당 메서드를 활용해서 StepExecution을 생성하고 Step이 실행된것처럼 테스트 메소드의 컨텍스트로 활용한다.
- @SpringBatchTest는 테스트에 사용하는 TestExecutionLisener를 지원한다.
- Job/Step 테스트하기
- Step을 테스트하기 위해서 JobLauncherTestUtils를 사용해 정의된 스텝을 실행한다.
- 스프링 배치가 실행시 자신이 트랜잭션을 제어해야하는데 다른 트랜잭션으로 래핑하면 정상수행이 불가능하다
- 스프링 배치가 실행시 자신이 트랜잭션을 제어해야하는데 다른 트랜잭션으로 래핑하면 정상수행이 불가능하다
- AbstractJobRepositoryFactoryBean의 validateTransactionState 참조
- jobRepository가 사용되기 전에 트랜잭션 여부를 확인한다.
'Reading Record > 스프링 배치 완벽 가이드' 카테고리의 다른 글
6장 잡 실행하기 (0) | 2021.11.15 |
---|---|
5장 JobRepository와 메타데이터 (0) | 2021.10.30 |
4장 잡과 스텝 이해하기 : 스텝 알아보기 (0) | 2021.10.24 |
4장 잡과 스텝 이해하기 : ExecutionContext 까지 (0) | 2021.10.17 |
2장 스프링 배치 (0) | 2021.10.03 |