不同测试方法上的 InvalidUseOfMatchersException

问题描述 投票:0回答:1

我在与使用 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

根据异常,第一个测试应该失败,但它通过了,第二个测试失败了。单独而言,这两项测试均已成功通过。

junit mockito spring-test
1个回答
2
投票
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();
}
© www.soinside.com 2019 - 2024. All rights reserved.