답변:
Java 8 이상의 경우 다음과 같이 쉽습니다.
when(mock.process(Matchers.anyList()));
Java 7 이하의 경우 컴파일러에 약간의 도움이 필요합니다. 사용 anyListOf(Class<T> clazz)
:
when(mock.process(Matchers.anyListOf(Bar.class)));
anyListOf
. anyList
작동 하지만 경고가 발생합니다.
anyListOf
더 이상 사용되지 않으므로 사용하지 않는 것이 좋습니다. 당신이 2 개 개의 다른 목록을 받아들이는 방법이있는 경우 자바 8의 예는 예를 들어, 메서드 오버로드의 경우에는 작동하지 않습니다 List<DBEntity>
와 List<DTO>
나는 사용하여이 문제를 해결했습니다 ArgumentMatchers
일반적으로 :when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
anyListOf
위의 구문 외에도 항상 다음 구문을 사용하여 제네릭을 명시 적으로 지정할 수 있습니다.
when(mock.process(Matchers.<List<Bar>>any(List.class)));
Java 8은 매개 변수를 기반으로 형식 유추를 새로 허용하므로 Java 8을 사용하는 경우 다음과 같이 작동 할 수 있습니다.
when(mock.process(Matchers.any()));
유형 또는 null 검사를 포함하여 검사를 적용 any()
하거나 anyList()
적용 하지 않습니다 . Mockito 2.x에서는 any(Foo.class)
"any instanceof
Foo" 를 의미하도록 변경 되었지만 any()
""을 포함한 모든 값을 의미합니다 null
.
참고 : 위 의 이름은와 (과)의 이름 충돌을 피하기 위해 최신 버전의 Mockito에서 ArgumentMatchers 로 전환되었습니다 org.hamcrest.Matchers
. 이전 버전의 Mockito는 org.mockito.Matchers
위와 같이 계속 사용해야합니다 .
Matchers.any()
매우 편리합니다!
Java 8 (버전 7 또는 6) 이전에 새로운 메소드 ArgumentMatchers.anyList를 사용합니다.
import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;
verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());