Java 如何使用Mockito验证未使用任何参数组合调用的mocked方法
我如何使用Mockito验证一个mocked方法根本没有被调用(使用任何参数组合) 例如,我有一个对象-Java 如何使用Mockito验证未使用任何参数组合调用的mocked方法,java,unit-testing,mocking,mockito,Java,Unit Testing,Mocking,Mockito,我如何使用Mockito验证一个mocked方法根本没有被调用(使用任何参数组合) 例如,我有一个对象-myObject,它正在使用第二个模拟对象-myMockedOtherObject,它有一个方法-somethodorother(字符串参数1,字符串参数2) 我想调用myObject.myMethod()并验证someMethodOrOther()没有被调用-使用任何参数组合 e、 g: 除非我不能这样做,因为someMethodOrOther()需要提供特定的参数。使用Mockito的参数
myObject
,它正在使用第二个模拟对象-myMockedOtherObject
,它有一个方法-somethodorother(字符串参数1,字符串参数2)
我想调用myObject.myMethod()
并验证someMethodOrOther()
没有被调用-使用任何参数组合
e、 g:
除非我不能这样做,因为
someMethodOrOther()
需要提供特定的参数。使用Mockito的参数匹配器,您可以完成您想要的:
myObject.doSomeStuff();
verify(myMockedOtherObject, never()).someMethodOrOther(
Mockito.anyString(),
Mockito.anyString()
);
您可以使用静态导入来减少冗余,就像您为
verify
和never
所做的那样。您需要使用参数匹配器来执行类似的操作。您提供了一个参数匹配器来对应方法中的每个参数,但必须确保选择了一个具有正确类型的参数。您可能需要的所有工具都列在
假设你的方法是
public void myMethod(
String text, int count, MyClass something, List<MyClass> someList) {
// ...
}
您可能需要的一些匹配器是-
-这些类型匹配每种类型的基本版本或对象版本。在我的示例中,我使用了anyInt()、anyLong()、anyShort()、anyBoolean()、anyByte()、anyChar()、anyFloat()、anyDouble()
来匹配anyInt()
,但它也将匹配int
整数
-这将完全匹配任何对象类型。在我的示例中,我使用它来匹配any(XXX.class)
MyClass
-这是编写anyString()
any(String.class)
这些都有助于匹配标准泛型集合类型。在我的示例中,我使用了anyListOf(XXX.class)、anySetOf(XXX.class)、anyMapOf(XXX.class、XXX.class)
来匹配anyListOf
列表
还有其他一些,我强烈建议您浏览一下Javadoc。但是这些是最有可能与
never()
一起使用的 以更清晰的方式呈现解决方案
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.never;
//Testing scenario
verify(mockObject, never()).someMethod(mockParam1, MockParam2);
OP:
never()
对于特定的方法调用,是确保该方法未被调用的最佳方法。如果您已经验证了所有其他方法调用,或者没有其他方法调用,那么您还可以使用verifyNoMoreInteractions(…)
和verifyzeroniteractions(…)
;但是,这些可能会使您的测试比您想要的更脆弱,因此它们不如Matt的解决方案好。我知道这个答案有多古老,但我似乎无法找到never()
。但是,times(0)
似乎是可用的。值得一提的是,还有一个any()
可以用于对象,而不必键入类。
verify(myMock, never()).myMethod(
anyString(), anyInt(), any(MyClass.class), anyListOf(MyClass.class));
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.never;
//Testing scenario
verify(mockObject, never()).someMethod(mockParam1, MockParam2);