sourcecode

Mockito의 일반적인 "any()" 메서드 사용

copyscript 2022. 7. 30. 18:15
반응형

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에서는 인수가 필요 없기 때문에anymethod 및 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

반응형