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


답변:


279

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

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

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

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

16
참고 : 이것은 Mockito 2. *에서 더 이상 사용되지 않으며 Mockito 3에서 제거 될 것입니다. Java 8 컴파일러가 이제 유형을 유추 할 수 있으므로 더 이상 사용되지 않습니다.
Kip

@artbristol anySet ()이 anyList ()와 동일하게 작동하는지 알고 있습니까? Java 8에 있으며 Eclipse IDE에서 경고가 발생합니다.
Fernando Fradegrada

1
사용하는 것이 좋습니다 anyListOf. anyList작동 하지만 경고가 발생합니다.
balki

3
anyListOf더 이상 사용되지 않으므로 사용하지 않는 것이 좋습니다. 당신이 2 개 개의 다른 목록을 받아들이는 방법이있는 경우 자바 8의 예는 예를 들어, 메서드 오버로드의 경우에는 작동하지 않습니다 List<DBEntity>List<DTO>나는 사용하여이 문제를 해결했습니다 ArgumentMatchers일반적으로 :when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
edufinn

14

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위와 같이 계속 사용해야합니다 .


4
Matchers.any()매우 편리합니다!
MBach

이제 Matchers는 더 이상 사용되지 않습니다. 다음은 mockito의 정보입니다. "ArgumentMatchers 사용.이 클래스는 Hamcrest org.hamcrest.Matchers 클래스와의 이름 충돌을 피하기 위해 더 이상 사용되지 않습니다.이 클래스는 버전 3.0에서 제거 될 수 있습니다." static.javadoc.io/org.mockito/mockito-core/2.7.21/org/mockito/…
oddmeter

@oddmeter 변경되었습니다.
Jeff Bowman

5

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

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

verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.