사용자 도구

사이트 도구


java:mockito

문서의 이전 판입니다!


Mockito

argThat

argThatArgumentMatcher를 조합하여 동적인 인자 비교가 가능하다. whenverify에서 모두 사용가능하다.

ArgumentMatcher 문서를 참조하면 된다.

class IsListOfTwoElements extends ArgumentMatcher<List> {
    public boolean matches(Object list) {
        return ((List) list).size() == 2;
    }
}
List mock = mock(List.class);
 
when(mock.addAll(argThat(new IsListOfTwoElements()))).thenReturn(true);
 
mock.addAll(Arrays.asList("one", "two"));
 
verify(mock).addAll(argThat(new IsListOfTwoElements()));

가능하면 argThat 부분을 메소드로 빼서 인자를 받아 ArgumentMatcher를 구성하는 것이 좋다. 아래는 문자열 List를 인자로 받을 때, 해당 리스트의 값이 모두 포함돼 있는지 검사하는 Matcher.

private List<String> sameStringList(final Collection<String> strings) {
    return argThat(new ArgumentMatcher<List<String>>() {
        @Override
        public boolean matches(Object argument) {
            List<String> args = (List<String>) argument;
            return args.size() == strings.size() && args.containsAll(strings);
        }
    });
}

when에서 동일한 모의 객체의 동일한 메소드를 두 번이상 argThat으로 호출하면 오류가 발생할 수 있다. 이 때는 doReturn 방식으로 when을 구성한다.

doReturn(리턴값).when(mockObject).mockMethod(argThat(....));

참고

java/mockito.1449658846.txt.gz · 마지막으로 수정됨: 2015/12/09 19:30 저자 kwon37xi