Как проверить, что конкретный метод не был вызван с помощью 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??**
}
}
4 ответов:
еще более значимым :
import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; // ... verify(dependency, never()).someMethod();документация по этой функции есть §4 "Проверка точного количества вызовов / по крайней мере x / никогда" и
neverjavadoc is здесь.
используйте второй аргумент на
Mockito.verifyспособ, как в:
verify(dependency, Mockito.times(0)).someMethod()
в качестве более общей картины, чтобы следовать, я, как правило, используют
@Afterблок в тесте:@After public void after() { verifyNoMoreInteractions(<your mock1>, <your mock2>...); }тест бесплатно проверить только то, что должны называться.
поэтому я нахожу этот шаблон полезным для перехвата всех неожиданных вызовов, которые специально не были проверены.
и
verifyNoMoreInteractions()иverifyZeroInteracions()метод внутренне имеют ту же реализацию, что и:public static transient void verifyNoMoreInteractions(Object mocks[]) { MOCKITO_CORE.verifyNoMoreInteractions(mocks); } public static transient void verifyZeroInteractions(Object mocks[]) { MOCKITO_CORE.verifyNoMoreInteractions(mocks); }таким образом, мы можем использовать любой из них на макет объекта или массив макетных объектов, чтобы проверить, что никакие методы не были вызваны с помощью макетных объектов.
Comments