Как проверить, что конкретный метод не был вызван с помощью 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??**
}
}
656   4  

4 ответов:

еще более значимым :

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

// ...

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

документация по этой функции есть §4 "Проверка точного количества вызовов / по крайней мере x / никогда" и never javadoc 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

    Ничего не найдено.