java - 获取 "InvalidUseOfMatchersException",即使它被正确使用

标签 java junit mockito

我有以下模拟对象:

@Mock
ObjectMapper objectMapper = new ObjectMapper();

然后我写了一些 mock 逻辑,声称我做错了:

Mockito.when(objectMapper.writeValueAsString(Mockito.anyObject())).thenThrow(JsonProcessingException.class);

我哪里出错了?

最佳答案

Matcher methods like anyObject(), eq() do not return matchers. Internally, they record a matcher on a stack and return a dummy value (usually null). This implementation is due to static type safety imposed by the java compiler. The consequence is that you cannot use anyObject(), eq() methods outside of verified/stubbed method.

我的建议是使用any()

例如

@Test
public void TestObjectMapper() {
    //Arrange
    ObjectMapper objectMapper = mock(ObjectMapper.class);
    when(objectMapper.writeValueAsString(any()))
        .thenThrow(new JsonProcessingException());

    //...
}

关于java - 获取 "InvalidUseOfMatchersException",即使它被正确使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52086808/

相关文章:

java - java中junit测试中的断言错误

java - 单元测试: how much do I need to mock?

kotlin - 如何使用Mockito模拟Kotlin ByteArray?

java - Java < 15 和 >= 15 的不同 Nashorn 引擎?

java - Java中并发Cache的修改

java - 可以采取哪些 SQL Server 05/08 安全措施来防止 SQL 注入(inject)?

java - 使用 Mockito 模拟单元测试 Java 类

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

java - @WebMvcTest 由于某种原因创建多个 Controller

Scala Value 类和 Mockito Matchers 不一起玩