Junit5 라이브러리 사용하기 위해선 아래 라이브러리 import 필요하다.
- import org.junit.jupiter.api.Test;
동등 비교하기 위해선 아래 junit5 메서드 사용해야 함
- assertEquals(기대값, 실제값);
Service나 controller를 테스트 할 때, 테스트 대상 Service나 controller 에서 composition으로 주입받아서(의존하는) 객체가 있으면 객체를 생성(new) 할 때 마다 의존 객체도 구현해서 주입해줘야하는 문제가 발생한다.
그런경우 @SpringBootTest 어노테이션을 붙이면, 스프링에서 어플리케이션을 직접 띄우는 것과 유사하게 테스트를 할때도 모든 스프링 빈을 다 만들어서 애플리케이션 실행하는 것과 같은 환경을 만들어서 테스트를 돌릴 수 있게 해준다.
(= 테스트 대상 서비스나 컨트롤러에서 주입받아서 사용되는 객체들을 설정한대로 주입/만들어 준다는 말)
@SpringBootTest는 주로 통합 테스트시에 사용함
그래서 아래처럼 @Autowired를 붙여서 스프링 Bean을 주입받아서 기능을 테스트를 할 수 있는 것
Unit Test 수행할 땐 @SpringBootTest 어노테이션 말고 @ExtendWith(MockitoExtension.class) 붙이고 테스트해야 함.
이 어노테이션의 의미는 JUnit 테스트를 Mockito라는 외부 라이브러리를 활용해서 진행하겠다 라는 의미이다.
@InjectMocks : 가짜 Mock 객체를 넣어줄 타겟 객체 지정
@Mock : Mock 객체 만들 것 위에 지정
아래 처럼 Mock 객체 동작을 정의하면, 테스트 할 메서드 로직에서 Mock으로 정의한 로직 호출 시 지정한 값이 응답된다.
given(테스트인스턴스.메서드(파라미터)).willReturn(return 받을 정의한 값);
ex : given(developerRepository.findByMemberId(anyString())).willReturn(Optional.of(Developer.builder().build()));
'테스트 > 테스트코드' 카테고리의 다른 글
Mockito, @Mock, @MockBean 등 어노테이션 설명 잘 되어 있는 블로그 (0) | 2023.08.13 |
---|---|
JUnit 5 기초 (Chapter 5) (0) | 2023.05.02 |
스프링부트 각 계층 테스트 하는 방법 (0) | 2023.01.03 |
Junit5에서 사용되는 주요 어노테이션 (0) | 2023.01.03 |
테스트코드 수동으로 직접 만들었을 때 단점 (테스트 프레임워크 안 쓸 때) (0) | 2023.01.03 |
댓글