Java 오픈소스 테스트 프레임워크
- Mockito사용 시 실제 객체를 모방한 가짜 객체Mock 객체 생성이 가능해짐.
- API client service를 만들어 테스트 하거나, 외부 서비스의 API client 혹은 DB와의 연결이 포함된 비즈니스 로직을 테스트 해야 한다면 웹 통신과 DB연결을 위한 소프트웨어가 필요할것.
이러한 연관성을 가진 프로그램을 테스트하기 위한 객체가 Mockito의 Mock객체이다.- 단위 테스트나 슬라이스 테스트 등에 Mock객체를 사용하는 것을
Mocking이라고 한다.
👉 컨트롤러에서 실제 서비스를 호출하지 않고 Mock 프레임워크에서 만든 Mock서비스를 호출하는 방식으로 계층간 연결을 끊는 것!
// build.gradle
dependencies {
testImplementation 'org.mockito:mockito-core:4.8.0
}
@MockBean : Application Context에 등록되어 있는 Bean에 대한 Mock객체를 생성하고 주입하는 역할을 수행한다. given(서비스.메서드(Mockito.any(엔티티.class))) : Mock객체가 특정 값을 리턴하는 동작을 지정함. Mock객체인 서비스의 메서드를 정의함.Mockito.any(엔티티.class)) : 변수타입 중 하나로 매개변수의 타입을 정의함. .willReturn(stub객체) : Mock객체는 실제 기능을 구현하는 것이 아니므로 실제처럼 행동하기 위해 미리 정의된 값을 반환한다. .willReturn()메서드로 반환값을 미리 지정할 수 있다.레포지토리를 호출하는 부분이 Mocking될 것
@ExtendWith(MockitoExtension.class) : Spring을 사용하지 않고 Junit에서 Mockito 기능을 사용@Mock : 필드에 해당하는 Mock객체를 생성@InjectMock :필드에 해당하는 Mock객체를 만들고 DI로 Mock객체를 주입given(레포지토리.findBy필드(엔티티.get필드())).willReturn(Optional.of(엔티티)); : 서비스에서 레포지토리의 메서드를 호출하는 부분을 Mocking. 즉 실제 페포지토리가 아닌 Mock레포지토리의 메서드를 정의.