[java] Mockito : 제네릭이있는리스트 매처

Mockito는 다음을 제공합니다.

when(mock.process(Matchers.any(List.class)));

어떻게 경고를 피하기 위해 processA가 소요 List<Bar>대신?



답변

Java 8 이상의 경우 다음과 같이 쉽습니다.

when(mock.process(Matchers.anyList()));

Java 7 이하의 경우 컴파일러에 약간의 도움이 필요합니다. 사용 anyListOf(Class<T> clazz):

when(mock.process(Matchers.anyListOf(Bar.class)));


답변

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 instanceofFoo” 를 의미하도록 변경 되었지만 any()“”을 포함한 모든 값을 의미합니다 null.

참고 : 위 의 이름은와 (과)의 이름 충돌을 피하기 위해 최신 버전의 Mockito에서 ArgumentMatchers 로 전환되었습니다 org.hamcrest.Matchers. 이전 버전의 Mockito는 org.mockito.Matchers위와 같이 계속 사용해야합니다 .


답변

Java 8 (버전 7 또는 6) 이전에 새로운 메소드 ArgumentMatchers.anyList를 사용합니다.

import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;

verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());


답변