seaking110 님의 블로그
테스트 코드! 본문
테스트 준비
의존성 추가
dependencies {
testImplementation platform('org.junit:junit-bom:5.9.1')
testImplementation 'org.junit.jupiter:junit-jupiter'
}
- 하지만 Spring-boot-starter-test 라고 스프링부트에는 테스트가 기본적으로 존재
- 따라서 의존성 추가 안해줘도 됨
H2 (Repository 테스트 or 통합 테스트)
- 아무런 설정을 하지 않아도 H2 의존성을 추가해주면 테스트가 됨
Given-When-Then 패턴
- Given: 테스트 실행을 위한 준비
- When : 메서드나 기능을 실행하는 과정
- Then : 실행 된 후 예상되는 결과가 나오는지 확인
테스트 Annotation 종류
- @ExtendWith
- 서비스 레이어를 테스트하는데 쓰이는 Annotation
- component 역시 service와 동일하기 때문에 conponent에서도 테스트 가능
- @WebMvcTest
- 컨트롤러 단위 테스트
- @DataJpaTest
- JPA의 레파지토리 용 단위 테스트
- JPA가 아니면 사용 불가
- @SpringBootTest
- 스프링 부트 전체를 테스트 수행
- 통합 테스트
Mocking
- 의존 객체가 존재 할 때 가짜로 의존 객체를 만들어서 이용하는 것!
- 사용 이유
- 외부 의존성 제거
- 테스트 범위 준수
- 에러 상황 강제 발생
행위 검증
- 테스트 시 특정한 행위를 하였는가? 를 확인
- Mockito의 verify() 메서드를 통해 검증
상태 검증
- 기능 수행 후 결과값이 기대값과 일치하는가? 를 확인
순서
- 이론적으로는 Repository 부터 진행하는게 맞음!
- 하지만 과거에 비해 Repository는 복잡한 로직이 잘 없기 때문에 우선순위에 밀릴 수 있다.
- 특히 JPA 단순 save, findAll, findById 같은 메서드들은 라이브러리에서 검증이 끝났으므로 크게 의미 없다.
Alt + Insert 키로 빠르게 Test 만들기!
레파지토리 테스트
- @Autowired 로 지정
서비스 테스트
- @Mock : 테스트 대상 외의 의존 객체
- @InjectMocks : 테스트 대상 객체
통합 테스트
- @SpringBootTest 사용
- @ActivieProfiles("local")로 application-local.properties를 만들어서 자신만 사용하자!
'Today I Learned' 카테고리의 다른 글
프로젝트에 부족한 부분을 찾아 리팩토링 (0) | 2025.02.27 |
---|---|
Cookie, JWT (0) | 2025.02.26 |
N+1 문제 + 동시성 제어 (0) | 2025.02.24 |
HttpMessageConverter란 무엇인가 (0) | 2025.02.21 |
뉴스 피드 팀 프로젝트를 마치며 (0) | 2025.02.20 |