[java]Mockito 기본 설명
JAVA 2017. 5. 24. 18:36 |Junit + Mockito
Junit 의 mock 중에 많이 사용되고 업데이트가 잘 이루어지고 있는 것에는 EasyMock, JMock, Mockito 가 있는데
이중 Mockito가 가장 간결한 코드로 테스트를 할 수 있다.
verify()
verify()을 이용하여 mock 객체에 대한 원하는 메소드가 특정조건으로 실행되었는지 검증할 수 있다.
mock 작업이 수행되었는지 검증한다. verify(T mock).method();
// mock
List mockedList = mock(List.class);
// mock 사용하기
mockedList.add("one");
mockedList.clear();
// verification
verify(mockedList).add("one");
verify(mockedList).clear();
VerificationMode의 값을 리턴해 주는 메소드는 다섯가지가 있다.
verify(T mock, VerificationMode mode).method()
----------------------------------------------------------------------------
atLeastOnece(); 적어도 한번 수행했는지 검증
atLeast(int n); 적어도 n 번 수행 했는지 검증
times(int n); 무조건 n번 수행했는지 검증 (n보다 크거나 작으면 오류로 간주)
atMost(int n); 최대한 n 번 수행했는지 검증
never(); 수행되지 않았는지 검증(수행했으면 오류로 간주)
@Test
public void verifyTest() {
@SuppressAjWarnings("unchecked")
List<String> testMock = mock(ArrayList.class);
testMock.add("1");
testMock.add("2");
testMock.add("3");
// add()가 최소한 1번 이상 호출되었는지 검증
verify(testMock, atLeastOnce()).add(anyString());
// add()가 최소한 3번 이상 호출되었는지 검증
verify(testMock, atLeast(3)).add(anyString());
// add()가 최대한 3번 이하 호출되었는지 검증verify(testMock, atMost(3)).add(anyString());
// add()가 3번 호출되었는지 검증verify(testMock, times(3)).add(anyString());
verify(testMock, times(1)).add("1"); // add("1")가 1번 호출되었는지 검증
verify(testMock, times(1)).add("2"); // add("2")가 1번 호출되었는지 검증
verify(testMock, times(1)).add("3"); // add("3")가 1번 호출되었는지 검증
// add("4")가 수행되지 않았는지를 검증
verify(testMock, never()).add("4");
InOrder inOrder = inOrder(testMock); //mock 순서 다르게 verify 정의하면 오류난다.
inOrder.verify(testMock).add("1"); //순서 알수있음
inOrder.verify(testMock).add("2"); //순서 알수있음
inOrder.verify(testMock).add("3"); //순서 알수있음
}
when()
제대로 된 mock의 역할을 수행하기 위해서는 원하는 값을 리턴하는 기능도 제공되어야한다.
그럴때 사용하는 메소드가 when이다. when()메소드는 Mock이 감싸고 있는 메소드가 호출되었을 때 ,Mock객체의 메소드(행위)를 호출 선언할때 사용한다.
when() 메소드는 OngoingStubbing 이라는 인터페이스를 리턴한다.
OngoingStubbing 의 메소드
thenAnswer(Answer<?> answer): Answer라는 인터페이스를 구현하며, 원하는 작업을 수행 할 수 있다.
- thenCallRealMethod(): 해당 메소드가 구현되어 있다면, 실제 메소드를 호출한다.
- thenReturn(T value): 지정한 값을 리턴한다.
- thenReturn(T value, T... values): 지정되어 있는 값을 순차적으로 리턴한다.
- thenThrow(java.lang.Throwable... throwables): 예외를 야기시키는 Throwable 객체를 지정한다.
@RunWith(MockitoJUnitRunner.class)
public class UserTest{}
public class AuthService{
private com.neowiz.nsis.mob.web.AuthDao dao;
// some code...
public boolean isLogin(String id){
boolean isLogin = dao.isLogin(id);
if( isLogin ){
// some code...
}
return isLogin;
}
}
public class AuthDao {
public boolean isLogin(String id){ //some code ... }
}
@Mock
AuthDao dao;
@InjectMocks
AuthService service;
@Test
public void example(){
MockitoAnnotations.initMocks(this);
when(dao.isLogin(eq("JDM"))).thenReturn(true);
assertTrue(service.isLogin("JDM") == true);
assertTrue(service.isLogin("ETC") == false);
}
private ModelAndView mnv;
@Before
public void setUp() throws Exception {
mnv = new ModelAndView();
}
public class CalculatorTest {
Calculator calculator = new Calculator();
@Test
public void testAdd() {
int result = calculator.add(4, 6);
assertThat(result, is(10));
}
}
junit 기본매쳐 링크 클릭하면 된다.
'JAVA' 카테고리의 다른 글
java StringTokenizer (0) | 2015.12.29 |
---|