programing

Mockito를 사용하여 특정 메서드가 호출되지 않았는지 확인하는 방법

itsource 2022. 7. 21. 20:18
반응형

Mockito를 사용하여 특정 메서드가 호출되지 않았는지 확인하는 방법

객체의 종속성에 따라 메서드가 호출되지 않았는지 확인하는 방법

예를 들어 다음과 같습니다.

public interface Dependency {
    void someMethod();
}

public class Foo {
    public bar(final Dependency d) {
        ...
    }
}

Foo 테스트의 경우:

public class FooTest {
    @Test
    public void dependencyIsNotCalled() {
        final Foo foo = new Foo(...);
        final Dependency dependency = mock(Dependency.class);
        foo.bar(dependency);
        **// verify here that someMethod was not called??**
    }
}

한층 더 의미 있는 것:

import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;

// ...

verify(dependency, never()).someMethod();

기능의 매뉴얼은 "Verifying of react count of invocations / least x / never" (정확한 호출 수 확인 / 적어도x / never)에 기재되어 있습니다.neverjavadoc이 왔습니다.

에서 두 번째 인수를 사용합니다.Mockito.verify메서드(예:

Mockito.verify(dependency, Mockito.times(0)).someMethod()

좀 더 일반적인 패턴으로, 저는 좀 더 일반적인 패턴으로@After테스트 블록:

@After
public void after() {
    verifyNoMoreInteractions(<your mock1>, <your mock2>...);
}

그러면 이 테스트는 호출 대상만 검증할 수 있습니다.

또, 「상호작용 없음」을 확인하는 것을 잊어버리는 일이 자주 있는 것을 알게 되었습니다만, 나중에 보면, 해서는 안 되는 것이 불려지고 있는 것을 알게 되었습니다.

따라서 이 패턴은 특별히 검증되지 않은 모든 예기치 않은 콜을 포착하는 데 도움이 됩니다.

먼저, 항상 mockito static을 Import해야 합니다.이렇게 하면 코드가 훨씬 읽기 쉽고 직관적입니다.

import static org.mockito.Mockito.*;

실제로 이를 실현하는 방법은 여러 가지가 있지만, (논쟁의의의 여지 없이) 이 기능을 사용하는 것이

verify(yourMock, times(0)).someMethod();

다른 테스트에서는 다음과 같은 특정 양의 실행을 주장하기 위해 이 방법을 사용합니다.

verify(yourMock, times(5)).someMethod();

다른 방법은 다음과 같습니다.

verify(yourMock, never()).someMethod();

또는 특정 조롱된 개체가 실제로 전혀 호출되지 않도록 하려면 다음을 사용할 수 있습니다.

verifyZeroInteractions(yourMock)

주의: verifyZeroInteractions(개체...)mocks)는 폐지됩니다.버전 3.0.1 이후현재 권장되는 방법은 다음과 같습니다.

verifyNoInteractions(yourMock)

둘 다verifyNoMoreInteractions()그리고.verifyZeroInteractions()method 내부 구현은 다음과 같습니다.

public static transient void verifyNoMoreInteractions(Object mocks[])
{
    MOCKITO_CORE.verifyNoMoreInteractions(mocks);
}

public static transient void verifyZeroInteractions(Object mocks[])
{
    MOCKITO_CORE.verifyNoMoreInteractions(mocks);
}

그 중 하나를 모의 객체나 모의 객체 배열에 사용하면 모의 객체를 사용하여 메서드가 호출되지 않았는지 확인할 수 있습니다.

예를 들어, 구문 수준에서 동작 중심 개발 스타일에 더 부합하고 싶다면 BDDMockito가 있습니다.

다음을 사용할 수 있습니다.

then(dependency).should(never()).someMethod();

동등한 대체품:

verify(dependency, never()).someMethod();

언급URL : https://stackoverflow.com/questions/12862659/how-to-verify-that-a-specific-method-was-not-called-using-mockito

반응형