Rootable의 개발일기
Spring Test 관련 정리 본문
📌 given - when - then
Test 코드를 작성하는 노하우이다.
- given : set data, 테스트할 데이터를 셋팅
- when : input data, 테스트할 메서드 혹은 작업을 수행
- then : validation, Assertions 등을 통해 검증
📌 assertThrows
assertThrows(기대하는 예외, () -> try 구문(예외 가능성이 있는 소스))
@Test
public void 중복_회원_예외() throws Exception{
//given
Member member1 = new Member();
member1.setName("spring");
Member member2 = new Member();
member2.setName("spring");
//when
memberService.join(member1);
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
//then
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
Reference:
📌 통합 테스트
- 실제 운영 환경에서 사용될 클래스들을 통합하여 테스트
- 단위 테스트와 같이 기능 검증을 위한 것이 아니라 Spring framework 에서 전체적으로 플로우가 잘 동작하는지 검증
하기 위해 사용한다.
1. 장점
- 애플리케이션의 설정, 모든 Bean 을 모두 로드하기 때문에 실제 운영 환경과 가장 유사한 테스트가 가능
- 전체적인 플로우를 쉽게 테스트 가능
2. 단점
- 애플리케이션의 설정, 모든 Bean 을 모두 로드하기 때문에 시간이 오래걸리고 무겁다.
- 테스트 단위가 크기 때문에 디버깅이 어려운 편
✔ @SpringBootTest
- Spring boot 는 @SpringBootTest 를 통해 스프링 부트 애플리케이션 테스트를 위한 거의 모든 의존성을 제공한다.
- @SpringBootTest 는 통합 테스트를 제공하는 기본적인 스프링 부트 애노테이션이다.
📢 Junit 버전에 따른 유의 사항
🖍 JUnit4 : @SpringBootTest 기능은 반드시 JUnit 의 SpringJUnit4ClassRunner 클래스를 상속 받은 @RunWith
(SpringRynnver.class) 와 함께 사용해야 한다.
🖍 JUnit5 : 해당 애노테이션 명시할 필요 없음
Reference:
https://goddaehee.tistory.com/211
'Spring' 카테고리의 다른 글
스프링 빈 등록 방법 (0) | 2023.04.27 |
---|---|
Dependency Injection(DI)과 IoC(Inversion of Control) (0) | 2023.04.27 |
@RequestBody와 @ResponseBody (0) | 2023.04.27 |
Spring MVC 패턴 (0) | 2023.04.27 |
Spring Boot 동작 (SSR) (0) | 2023.04.26 |