Java 8부터 인수없는 any메소드를 사용할 수 있으며 컴파일러에서 type 인수를 유추합니다.
verify(bar).doStuff(any());
설명
Java 8의 새로운 점 은 표현식 의 대상 유형 이 하위 표현식의 유형 매개 변수를 유추하는 데 사용된다는 것입니다. Java 8 이전에는 유형 매개 변수 유추에 사용 된 메소드에 대해서만 인수가 사용됩니다 (대부분).
이 경우의 매개 변수 유형은 doStuff의 대상 유형이 any()되고의 반환 값 유형은 any()해당 인수 유형과 일치하도록 선택됩니다.
이 메커니즘은 주로 람다 식을 컴파일 할 수 있도록 Java 8에 추가되었지만 일반적으로 형식 유추를 향상시킵니다.
기본 유형
불행히도 기본 유형에는 작동하지 않습니다.
public interface IBar {
void doPrimitiveStuff(int i);
}
verify(bar).doPrimitiveStuff(any()); // Compiles but throws NullPointerException
verify(bar).doPrimitiveStuff(anyInt()); // This is what you have to do instead
문제는 컴파일러가 Integer의 반환 값으로 유추한다는 것 입니다 any(). Mockito는 (삭제로 인해) 이것을 인식하지 못하고 참조 유형에 대한 기본값 인을 반환합니다 null. 런타임은 intValue에 전달하기 전에 메소드를 호출하여 리턴 값을 개봉하려고 시도 doStuff하며 예외가 발생합니다.
any메소드가 작동해야하기 때문에 Java 8 이후로 많은 관심을 끌지 않을 것이라고 추측했을 것 입니다. 당신은 작동하는 것들에 대한 답을 찾지 않습니다!