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)에 기재되어 있습니다.never
javadoc이 왔습니다.
에서 두 번째 인수를 사용합니다.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
'programing' 카테고리의 다른 글
어레이 요소를 제거하지 못했습니다. (0) | 2022.07.21 |
---|---|
다른 getter에 의존하는 Vuex getter 단위 테스트 (0) | 2022.07.21 |
외부 javascript에서 Vue Component 범위 액세스 (0) | 2022.07.21 |
VSCode에서 Vuex Getter Setter를 생성하는 방법 (0) | 2022.07.21 |
Vuej 2 + 폼 검증 (0) | 2022.07.21 |