테스트 예시
Mock 객체 생성
public class ExampleTest {
private ExampleService exampleService;
private ExampleRepository mockExampleRepository;
@SetUp
public void setUp() {
mockExampleRepository = Mockito.mock(ExampleRepository.class);
exampleService = new ExampleService(mockExampleRepository);
}
}
Annotation기반 예시
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.InjectMocks;
import org.mockito.Mock;
@ExtendWith(MockitoExtension.class)
public class ExampleTest {
@InjectMocks
private ExampleService exampleService;
@Mock
private ExampleRepository mockExampleRepository;
}
Annotation 기반 예시
import org.mockito.InjectMocks;
import org.mockito.Mock;
public class ExampleTest {
@InjectMocks
private ExampleService exampleService;
@Mock
private ExampleRepository mockExampleRepository;
@SetUp
public void setUp() {
MockitoAnnotations.openMocks(this);
}
}
Mock 객체 given 설정 예시
특정 값이 입력했을 때 도메인 로직이 어떻게 동작할지 핸들링할 수 있습니다.
/*mock 객체의 특정 메서드에 특정 값을 전달했을 때 특정 결과를 반환하도록 유도하는 방법.*/
BDDMockito.given(mockExampleRepository.findOne(any()))
.willReturn(Optional.empty());
/*특정 메서드에서 특정 값을 전달했을 때 특정 예외처리가 반환되도록 유도하는 방법. new 키워드 사용가능*/
BDDMockito.given(mockExampleRepository.findOne(isA(String.class)))
.willThrow(Exception.class);
Mcok 객체 then 예시
ExampleResponse result = exampleService.example("AA");
// then
/*원하는 결과인지 테스트*/
Assertions.assertThat(result.getMsg()).isEqualsTo("성공");
/*mock객체에 원하는 값을 전달했는지 테스트*/
ArgumentCaptor<String> argumentCaptor = ArgumentCaptor.forClass(String.class);
Mockito.verify(mockExampleRepository, Mockito.times(n)).findOne(argumentCaptor.capture());
Assertions.assertThat(argumentCaptor.getValue()).isEqualsTo("AA");
/*mock객체의 findOne 메서드에 String 타입의 값을 전달했는지 검사.*/
Mockito.verify(mockExampleRepository).findOne(isA(String.class));
/*mock객체의 findOne 메서드가 최소 n번 호출했는지 검사.*/
Mockito.verify(mockExampleRepository, Mockito.times(n)).findOne(any());
'Backend > SpringBoot' 카테고리의 다른 글
[SpringBoot] JUnit Test Class AssertJ기본 설정하기 (0) | 2023.06.26 |
---|---|
[Spring Boot] main이외 디렉토리 추가 및 적용하기 (0) | 2022.11.24 |
[Mybatis] All Elements are null (0) | 2022.10.24 |
[Spring Boot]Response Handling 하기-Flux (0) | 2022.07.10 |
[Spring Boot]Response Handling 하기-MVC (0) | 2022.07.09 |