Mockito Junit测试失败,甚至函数体为空,真奇怪

Mockito Junit测试失败,甚至函数体为空,真奇怪,junit,mockito,Junit,Mockito,我使用maven和JUnit4.5,mockito 1.7 如果右键单击TestCaseA.java中的代码,选择“RunAs”-“Junit test”就可以了但如果我右键单击TestCaseA.java的父包,选择“运行方式”-“Junit测试”,它将失败: org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 检测到放错位置的参数匹配器!在这行之前的某个地方,您可能误用了Mockito参数匹配器例如,您可能在验证或存根

我使用maven和JUnit4.5,mockito 1.7

如果右键单击TestCaseA.java中的代码,选择“RunAs”-“Junit test”就可以了
但如果我右键单击TestCaseA.java的父包,选择“运行方式”-“Junit测试”,它将失败:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
检测到放错位置的参数匹配器!在这行之前的某个地方,您可能误用了Mockito参数匹配器
例如,您可能在验证或存根之外使用了anyObject()参数匹配器。下面是正确使用参数匹配器的示例:when(mock.get(anyInt()).thenReturn(null);doThrow(newruntimeexception()).when(mock).someVoidMethod(anyObject());验证(mock).someMethod(包含(“foo”));在testCaseA.setUP(testCaseA.java:33)


这种情况通常发生是因为您在其他测试用例中进行了测试。Mockito匹配器实际上是通过副作用工作的,因此不同的测试用例可能会污染您的测试环境

使用
@RunWith(mockitojunitestrunner.class)
作为其他测试类的开头,或者为每个测试类添加如下所示的方法:

@After
public void checkMockito() {
  Mockito.validateMockitoUsage();
}

…这就是MockitoJunitestRunner所做的,不管怎样,也可以为您调用
initMocks(this)
。在这一点上,您的另一个测试用例将失败,并且您将有更多的运气单独调试它。您很有可能正在另一个测试用例中存根或验证
final
方法。有关更多上下文或查看更多调试提示,请参见上面的链接。

包中还有多少其他测试?您是否使用任何特殊跑步者(Mockito、Spring等)?
@After
public void checkMockito() {
  Mockito.validateMockitoUsage();
}