如何使用Mockito验证模拟方法是否完全没有被调用 - 使用任何参数组合?
例如,我有一个对象 - myObject
- 正在使用第二个模拟对象 - myMockedOtherObject
- 它有一个方法 - someMethodOrOther(String parameter1, String parameter2)
。
我想通过任何参数组合来调用myObject.myMethod()
并验证someMethodOrOther()
是否被调用。
e.g:
myObject.doSomeStuff();
verify(myMockedOtherObject, never()).someMethodOrOther();
除非我不能这样做,因为someMethodOrOther()
需要提供特定的参数。
答案 0 :(得分:71)
你可以用Mockito的论证匹配器完成你想要的东西:
myObject.doSomeStuff();
verify(myMockedOtherObject, never()).someMethodOrOther(
Mockito.anyString(),
Mockito.anyString()
);
当然,对于verify
和never
的静态导入,您可以使其更加简洁。
答案 1 :(得分:14)
你需要使用参数匹配器来做这样的事情。您提供了一个参数匹配器来对应方法中的每个参数,但您必须确保选择一个具有正确类型的参数。您可能需要的所有内容都列在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>
。还有一些其他人,我强烈建议您通过Javadoc进行简短的浏览。但这些是您最有可能与never()
一起使用的。
答案 2 :(得分:0)
更明确地展示解决方案
"CONN","CHANNEL","APPLTAG","USERID","CONNAME","OBJNAME","OBJTYPE","OPENOPTS"