Java 如何使用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的参数

我如何使用Mockito验证一个mocked方法根本没有被调用(使用任何参数组合)

例如,我有一个对象-
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);