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 이후로 많은 관심을 끌지 않을 것이라고 추측했을 것 입니다. 당신은 작동하는 것들에 대한 답을 찾지 않습니다!