Maven Dependency
버전의 경우 2.x 버전이 나오면서 BDD라는 개발방법이 추가되었는데 1.x로도 충분히 쓸 수 있다고 함
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
<scope>test</scope>
</dependency>
기본 사용법
thenReturn
원하는 값을 리턴하는 것. 이런 방식으로 사용하는데, 이 경우는 id가 1인 경우에만 의도대로 동작하게 된다. 그러나 이렇게 각 id별로 모두 통제할 수는 없기 때문에 생겨난 것이 any~로 시작하는 matchers이다.
UserDao dao = mock ( UserDao.class );
when ( dao.findById ( 1 ) ) . thenReturn ( testUser );
matchers
사용 방법은 예시와 같고, 세부적으로는 anyInt(), anyString(), anyDouble(), anyLong(), anyList(), anyMap()과 같은 방식들을 지원한다.
UserDao dao = mock ( UserDao.class );
when ( dao.findById ( ) ) . thenReturn ( testUser );
thenThrow
예시는 thenReturn이었고 이번에는 thenThrow로 exception발생시 던져버리는 것이다!
UserDao dao = mock ( UserDao.class );
when ( dao.findById ( ) ) . thenThrow ( new RuntimeException ( "invalid..." ).... ;
verify
호출 횟수 검사, 쉽게 말하자면 몇번 불렸는지 확인하는 것이다! 위 예시에서는 dao . findById ( anyInt ( ) ); 부분이 딱 3번 실행되었는지 확인하는 것이다. 확인하는 조건으로는 위의 times(int) 이외에도 never(), atLeastOnce(), atLeast(int), atMost(int)가 있다. 상황에 맞게 사용하면 된다.
verify ( dao , times ( 3 ) ) . findById ( anyInt ( ) );
spy
특정 메소드만 조작하기 위해서 앞의 mock의 경우 .class로 사용한 것과 다르게 new를 사용한다. mock은 재현시키는 것 이외에는 아무것도 하지 않고 그냥 넘어간다. 그렇지만 실제 사용할 일은 잘 없다고 한다.
agent = spy ( new HttpClientAgent ( ) );
when ( agent . callUrl ( " " ) ) . thenReturn ( true );
@Mock, @InjectMocks
Mock 메소드 대신 annotation을 활용 가능하다. RunWith부분은 annotation을 사용하기 위해 필요한 것
import org.junit.runner.RunWith;
import org.mockito.Mock;
@RunWith (MockitoJUnit44Runner.class)
public class UserServiceTest {
@Mock
UserRepository repository;
@InjectMocks
UserService service;
....
'테스트' 카테고리의 다른 글
Mock Test 중 cannot subclass final class class ... (0) | 2022.03.15 |
---|---|
이클립스에서 Eclemma 쓰기 (0) | 2022.03.14 |
테스트 대역 (Test Doubles) (0) | 2022.03.14 |
이클립스에서 JUnit4 사용하기 (0) | 2022.03.14 |
JUnit4 (0) | 2022.03.14 |