我在与使用 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
根据异常,第一个测试应该失败,但它通过了,第二个测试失败了。单独而言,这两项测试均已成功通过。
calculator.calculateA(any(), any(), any(), eq(null));
这不是匹配器的有效使用。 Mockito 仅在与
any
或 eq
一起使用时才使用 when
和 verify
,作为 匹配调用 的方法,告诉 Mockito 要返回什么或应该记录哪些调用。您需要使用特定值调用 calculateA
,例如 calculator.calculateA(1, 2, 3, null);
。
Mockito 匹配器通过副作用工作,因此 Mockito 唯一可以抛出异常的时间是您下次与 Mockito 交互时。这可能是另一种方法,但您可以通过使用 MockitoRule、MockitoJUnitRunner 或通过从 @After
方法添加对
validateMockitoUsage的调用来帮助确保这些方法是本地的:
@After public void validateMockito() {
Mockito.validateMockitoUsage();
}