Как проверить выкрикрованный метод, который не вызывается с любой комбинацией параметров с помощью Mockito

Как я могу проверить, что метод издевательства вообще не был вызван - с любой комбинацией параметров - с помощью Mockito?

Например, у меня есть объект - myObject - который использует второй, myMockedOtherObject объект - myMockedOtherObject - который имеет метод - someMethodOrOther(String parameter1, String parameter2).

Я хочу вызвать myObject.myMethod() и убедиться, что someMethodOrOther() не вызван - с любой комбинацией параметров.

например:

myObject.doSomeStuff();

verify(myMockedOtherObject, never()).someMethodOrOther();

Кроме того, я не могу этого сделать, потому что someMethodOrOther() требует наличия определенных параметров.

Ответы

Ответ 1

Вы можете достичь желаемого с помощью сопоставителей аргументов Mockito:

myObject.doSomeStuff();

verify(myMockedOtherObject, never()).someMethodOrOther(
    Mockito.anyString(),
    Mockito.anyString()
);

Вы можете сделать это немного менее многословным со статическим импортом, как у вас для verify и never.

Ответ 2

Вам нужно использовать аргумент-аргументы, чтобы делать такие вещи. Вы предоставляете аргумент-сопоставление для соответствия каждому параметру в вашем методе, но вы должны убедиться, что выбрали тот, который имеет правильный тип. Все, что вам нужно, перечислены на странице http://docs.mockito.googlecode.com/hg/latest/org/mockito/Matchers.html.

Предположим, что ваш метод

public void myMethod(
    String text, int count, MyClass something, List<MyClass> someList) {
    // ...
}  

Ваш оператор проверки может выглядеть так.

verify(myMock, never()).myMethod(
    anyString(), anyInt(), any(MyClass.class), anyListOf(MyClass.class));

Некоторые из тех, кто вам нужен,

  • anyInt(), anyLong(), anyShort(), anyBoolean(), anyByte(), anyChar(), anyFloat(), anyDouble() - Они соответствуют либо примитивной версии, либо объектной версии каждого из этих типов. В моем примере я использовал anyInt() для соответствия int, но он также будет соответствовать Integer.
  • any(XXX.class) - это будет соответствовать любому типу объекта вообще. В моем примере я использовал его для соответствия MyClass.
  • anyString() - это альтернативный способ записи any(String.class)
  • anyListOf(XXX.class), anySetOf(XXX.class), anyMapOf(XXX.class, XXX.class) - они подходят для сопоставления стандартных типов коллекций. В моем примере я использовал anyListOf для соответствия List<MyClass>.

Есть несколько других, и я настоятельно рекомендую провести краткую прогулку по Джавадоку. Но это те, которые вы, скорее всего, будете использовать с never().

Ответ 3

Более четкий способ представления решения

import static org.mockito.Mockito.verify;

import static org.mockito.Mockito.never;

//Testing scenario

verify(mockObject, never()).someMethod(mockParam1, MockParam2);