Programing

Mockito.any ()는 제네릭과 인터페이스를 전달합니다.

lottogame 2020. 6. 21. 19:39
반응형

Mockito.any ()는 제네릭과 인터페이스를 전달합니다.


제네릭으로 인터페이스 유형을 전달할 수 있습니까?

인터페이스 :

public interface AsyncCallback<T>

내 테스트 방법에서 :

Mockito.any(AsyncCallback.class)

미루 <ResponseX>거나하지 .class않았다.


형식에 안전한 방법이 있습니다. 다음과 같은 형식으로 사용 ArgumentMatchers.any()하고 한정하십시오.

ArgumentMatchers.<AsyncCallback<ResponseX>>any()

의견에 언급 된 pierrefevrier는 Mockito의 새로운 버전과 함께

Matchers.<AsyncCallback<ResponseX>>any()

Java 8을 사용 any()하면 향상된 유형 유추로 인해 인수 또는 유형 매개 변수없이 간단하게 정적 가져 오기 를 사용할 수 있습니다 . 컴파일러는 이제 대상 유형 (메소드 인수의 유형)에서 실제로 의미하는 것을 알았습니다 Matchers.<AsyncCallback<ResponseX>>any(). 이것은 Java 8 이전의 솔루션입니다.


제네릭을 허용하려면 다음과 같은 메커니즘을 채택해야했습니다.

import static org.mockito.Matchers.any;
List<String> list = any();
when(callMyMethod.getResult(list)).thenReturn(myResultString);

이것이 누군가를 돕기를 바랍니다.


pierrefevrier 의견을 답변으로 게시하면 댓글 대신 답변에있는 경우 유용 할 수 있습니다.

Mockito의 새로운 버전 : (Matchers.<AsyncCallback<ResponseX>>any()


thSoft의 답변에 덧붙여 메소드의 any ()에 대한 정규화 된 호출은 반환 유형이 유추를 허용했기 때문에 자격을 제거 할 수 있음을 의미했습니다.

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)

참고 URL : https://stackoverflow.com/questions/7917635/mockito-any-pass-interface-with-generics

반응형