Как проверить выкрикрованный метод, который не вызывается с любой комбинацией параметров с помощью 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);