【问题标题】:InvalidUseOfMatchersException on a different test method在不同的测试方法上出现 InvalidUseOfMatchersException
【发布时间】:2019-09-13 20:05:48
【问题描述】:

我在与使用 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】:
    calculator.calculateA(any(), any(), any(), eq(null));
    

    这不是匹配器的有效使用。 Mockito 仅在与whenverify 一起使用时使用anyeq,作为一种匹配调用的方法,告诉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();
    }
    

    【讨论】:

    • 感谢您的快速回复!
    猜你喜欢
    • 1970-01-01
    • 2019-11-01
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2020-08-28
    相关资源
    最近更新 更多