Mockito.any() Generics와의 인터페이스 패스
범용 인터페이스 타입을 통과할 수 있습니까?
인터페이스:
public interface AsyncCallback<T>
내 테스트 방법:
Mockito.any(AsyncCallback.class)
놓는 것<ResponseX>
배후 또는 을 위해.class
효과가 없었습니다.
타입 세이프 방법이 있다: 사용ArgumentMatchers.any()
다음 유형으로 자격을 부여합니다.
ArgumentMatchers.<AsyncCallback<ResponseX>>any()
Java 8을 사용하면 간단하게any()
(고도의 스태틱 Import)는 확장된 유형 추론을 위해 인수 또는 유형 매개 변수를 사용하지 않습니다.컴파일러는 타겟타입(method 인수의 타입)에서 실제로 무엇을 의미하는지 알게 되었습니다.Matchers.<AsyncCallback<ResponseX>>any()
이는 Java 8 이전 솔루션입니다.
제네릭스를 허용하기 위해 다음과 같은 메카미즘을 채택해야 했습니다.
import static org.mockito.Matchers.any;
List<String> list = any();
when(callMyMethod.getResult(list)).thenReturn(myResultString);
이게 도움이 됐으면 좋겠네요.
pierfevrier 코멘트를 답변으로 투고하는 것은 코멘트가 아닌 답변에 있는 경우에 도움이 될 수 있습니다.
새로운 버전의 Mockito:(Matchers.<AsyncCallback<ResponseX>>any()
게다가 메서드내의 any()에 수식 콜을 발신하는 Soft 의 응답에 가세해, 반환 타입에 의한 추론이 가능하기 때문에, 수식 콜을 삭제할 수 있었습니다.
private HashMap<String, String> anyStringStringHashMap() {
return Matchers.any();
}
필요에 따라 억제 경고를 추가하여 캐스트할 수 있습니다.
@SuppressWarnings("unchecked")
AsyncCallback<ResponseX> callback = Mockito.any(AsyncCallback.class)
Java가 '일반적인' 제네릭을 허용한다면, 이러한 방법을 사용할 수 있을 것입니다.
private static <T, E> T<E> mock(Class<T<E>> clazz)
나도 스프링을 사용하는데 비슷한 문제가 있었다.Example
:
Mockito.when(repo.findAll(Mockito.<Example<SrvReqToSupplierComment>>any()))
.thenReturn(Lists.emptyList());
여기서는 자격증을 사용해야 합니다.b/c findAll 메서드는 다음과 같은 여러 유형을 사용할 수 있습니다.Sort
그리고.Iterable
. 를 사용할 수도 있습니다.Mockito.any(Example.class)
물론 안전 경고 유형도 있습니다.
인수 없는 정규 제네릭 유형 사용any()
방법은 유효합니다(즉,ArgumentMatchers.<AsyncCallback<ResponseX>>any()
). 단, 제네릭 표현이 길어지면 다루기 어려워질 수 있습니다.대안은 반론을 제기하는 것이다.any()
는 특정 범용 타입을 반환 타입으로 사용하여 독자적인 범용 메서드를 호출합니다.
private static <T> AsyncCallback<T> anyAsyncCallback() {
return ArgumentMatchers.any()
}
사용.
Mockito.verify(mockObject).performCallback(any(), anyAsyncCallback())
언급URL : https://stackoverflow.com/questions/7917635/mockito-any-pass-interface-with-generics
'programing' 카테고리의 다른 글
스프링 프레임워크의 applicationContext.xml과 spring-servlet.xml의 차이점 (0) | 2022.08.03 |
---|---|
128비트 정수 모듈로 64비트 정수를 계산하는 가장 빠른 방법 (0) | 2022.08.03 |
vue-ssr-renderer를 사용하여 웹 팩에서 생성된 Vue SSR 응용 프로그램에 서버 데이터/콘텍스트를 전달하려면 어떻게 해야 합니까? (0) | 2022.08.03 |
RecycleerView 하단으로 스크롤하는 방법ScrollToPosition이 작동하지 않습니다. (0) | 2022.08.03 |
Vuex 상태 변경 내용이 Vue 구성 요소 템플릿에 전파되지 않음 (0) | 2022.08.03 |