其他测试方法上的InvalidUseOfMatchersException

时间:2019-09-13 20:05:48

标签: junit mockito spring-test

我在与使用Matchers的测试不同的测试上得到InvalidUseOfMatchersException

以下两个测试分别运行良好,但是当一起运行时,第一个测试成功通过后,第二个测试将失败并抛出指向第一个测试的InvalidUseOfMatchersException

@Test(expected = InputException.class) public void shouldThrowExceptionWhenInputNull() { calculator.calculateA(any(), any(), any(),eq(null)); }

@Test public void testCalculateB() { assertTrue(BigDecimal.valueOf(8000).compareTo(calculator.calculateB(12)) == 0);
}

这是堆栈跟踪中的异常 org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Misplaced or misused argument matcher detected here:

TestClass.shouldThrowExceptionWhenInputNull

根据异常,第一个测试应该失败,但通过并第二个测试失败。这些测试分别都通过了成功

1 个答案:

答案 0 :(得分:1)

calculator.calculateA(any(), any(), any(), eq(null));

这不是Matchers的有效用法。当与anyeq一起使用时,Mockito仅使用whenverify作为匹配调用的一种方式,这些调用告诉Mockito返回什么或返回什么。呼叫应已记录。您需要使用特定的值调用calculateA,例如calculator.calculateA(1, 2, 3, null);

Mockito匹配器work via side effects,因此Mockito唯一可以引发异常的情况是您下次与Mockito进行交互。这可能是另一种方法,但是您可以使用MockitoRule,MockitoJUnitRunner或通过从@After方法向validateMockitoUsage的调用来帮助确保它们是本地的:

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