Mockito의 일반적인 "any()" 메서드 사용
나는 일련의 배열을 예상하는 메서드와의 인터페이스를 가지고 있다.Foo
:
public interface IBar {
void doStuff(Foo[] arr);
}
저는 Mockito를 사용하여 이 인터페이스를 조롱하고 있습니다. 그리고 저는 단언하고 싶습니다.doStuff()
호출됩니다만, 전달된 인수의 유효성을 검증하고 싶지는 않습니다.「 Don't care 」
다음 코드를 작성하려면 어떻게 작성합니까?any()
, 일반적인 메서드가 아닌anyObject()
?
IBar bar = mock(IBar.class);
...
verify(bar).doStuff((Foo[]) anyObject());
이거면 될 것 같아
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.verify;
verify(bar).DoStuff(any(Foo[].class));
Java 8에서는 인수가 필요 없기 때문에any
method 및 type 인수는 컴파일러에 의해 추론됩니다.
verify(bar).doStuff(any());
설명.
Java 8의 새로운 기능은 표현식의 대상 유형이 하위 표현식의 유형 매개 변수를 추론하는 데 사용된다는 것입니다.Java 8 이전에는 형식 매개 변수 추론에 사용되는 메서드만 인수했습니다(대부분).
이 경우 파라미터 타입은doStuff
의 타겟 타입이 됩니다.any()
, 및 의 반환값 타입any()
해당 인수 유형과 일치하도록 선택됩니다.
이 메커니즘은 주로 람다 식을 컴파일하기 위해 추가되었지만 일반적으로 유형 추론을 개선합니다.
원시형
이것은, 유감스럽게도, 원시 타입에서는 동작하지 않습니다.
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
. 런타임은 null 반환값을 호출하여 개봉을 시도합니다.intValue
전달하기 전의 방법doStuff
예외가 느려집니다.
사용할 수 있습니다.Mockito.isA()
그 경우:
import static org.mockito.Matchers.isA;
import static org.mockito.Mockito.verify;
verify(bar).doStuff(isA(Foo[].class));
http://site.mockito.org/mockito/docs/current/org/mockito/Matchers.html#isA(java.lang.Class)
이 기능은 최신 프로젝트(1.10.19부터 업데이트)에 사용할 필요가 있었기 때문에 (이미 mockito-core 버전 2.1.0 이상을 사용하고 있는) 사용자를 최신 상태로 유지하기 위해서만 상기 답변의 정적 방법을 사용해야 합니다.ArgumentMatchers
클래스:
import static org.mockito.ArgumentMatchers.isA;
import static org.mockito.ArgumentMatchers.any;
버전 3부터 가능한 한 Mockito 아티팩트를 최신 상태로 유지할 계획이라면 이 클래스는 존재하지 않을 수 있습니다.
2.1.0 이후로는 org.mockito의 Javadoc.응시자 상태:
사용하다
org.mockito.ArgumentMatchers
이 클래스는 Hamcrest*와의 이름 충돌을 피하기 위해 폐지되었습니다.org.hamcrest.Matchers
3.0class에서 삭제될 수 . 이 클래스는 버전 3.0에서 삭제될 수 있습니다.
더 읽고 싶으면 모키토 와일드카드에 대한 기사를 써놨어요
언급URL : https://stackoverflow.com/questions/1778744/using-mockitos-generic-any-method
'sourcecode' 카테고리의 다른 글
Java에서 Comparator를 사용하여 정렬하는 방법 (0) | 2022.07.30 |
---|---|
No Such Method Error 수정 방법 (0) | 2022.07.30 |
경과시간 측정이 용이 (0) | 2022.07.30 |
Vuex: 개체를 커밋한 후 ID로 검색 (0) | 2022.07.30 |
gdb에 설정을 저장하는 방법 (0) | 2022.07.30 |