Mockito匹配器不识别参数中的抽象类

时间:2017-11-01 08:52:16

标签: unit-testing mocking mockito

这是一个示例代码

when(someObject.someMethod(any(AbstractClass.class)).thenReturn(mockvalue);

在上面的代码中,它没有识别参数any(AbstractClass.class),它调用的是real方法而不是返回mock值。

1 个答案:

答案 0 :(得分:1)

我很抱歉,但你在那里走错了路。

any( SomeClass.class ) 执行您认为的操作。特别是 NOT 检查参数是否为SomeClass,请参阅Javadoc:

  

任何类型的对象,不是给定类的必需对象。
  提供类参数只是为了避免强制转换。

如果您查看Any类,您将看到原因:

public boolean matches(Object actual) {
    return true;
}

因此,任何参数(顾名思义)都会被接受。在您的情况下,这意味着如果调用该特定someMethod上的方法someObject,它将返回mockvalue,无论实际参数是什么。

这意味着您的问题完全在其他地方,例如......

  • 您的模拟未正确注入您正在测试的类中(因此该类使用的是另一个对象,而不是模拟)
  • 实际上并未调用所讨论的方法(例如,可能存在另一个具有类似签名的方法等)。

没有代码就很难说。我会问一个新问题,但这次提供更多代码。