我的方法有以下代码。
getRequestedCapabilities(){
ObjectMapper mapper = new ObjectMapper();
Capabilities capabilities = mapper.readValue(new
File(getClass().getClassLoader().getResource(jsonFilePath).getFile()), Capabilities.class);
}
在我的测试方法中,我准备了一个DTO(功能),mapper.readValue()在调用时需要返回。
Mockito.when(mapper.readValue(Mockito.mock(File.class),Mockito.eq(Capabilities.class))).thenReturn(capabilities);
但我得到一个例外,说无效使用匹配器。 你能建议我怎么做?这里的问题是如何模拟传递给mapper.readValue方法的参数,该方法具有方法调用链。
答案 0 :(得分:0)
您可以简单地指定如果readValue
收到任何参数,那么它将返回capabilities
个对象。像这样:
ObjectMapper mapper = mock(ObjectMapper.class);
Mockito.when(mapper.readValue(any(), any())).thenReturn(capabilities);
但是如果你想更具体地使用模拟录音,你可以指定应该调用哪种类型的参数。像这样:
ObjectMapper mapper = mock(ObjectMapper.class);
Mockito.when(mapper.readValue(any(File.class), any(Capabilities.class))).thenReturn(capabilities);
更新: 您可以手动设置文件路径的值。最后,在单元测试中,您可以并且应该直接在测试中声明任何值。否则,您的测试不再是单元测试,因为您正在与其他组件进行交互。
答案 1 :(得分:0)
Mockito.when(mapper.readValue(Mockito.mock(File.class),Mockito.eq(Capabilities.class))).thenReturn(capabilities);
它来自Mockito.mock,当使用参数匹配器时,所有参数必须是匹配器。然后,您应该将Mockito.mock(File.class)
替换为Mockito.any(File.class)
或Mockito.eq(a properly initialized mock)