gpt4 book ai didi

java - 用于类型引用的 Mockito 匹配器

转载 作者:行者123 更新时间:2023-12-02 00:37:56 26 4
gpt4 key购买 nike

我正在尝试使用 Mockito 编写 Java 单元测试,但无法让匹配器正常工作。

我想测试以下类(class)

CustomService.java

public class CustomService {

private final ApplicationProperties props;

public CustomService(ApplicationProperties props){
this.props = props;
}

private final ObjectMapper mapper = new ObjectMapper();
public void method(JsonNode message) throws CustomException {
try {
List<String> actions = mapper.readValue(message.get("actions").toString(), mapper.getTypeFactory().constructCollectionType(List.class, String.class));
System.out.println(actions);
} catch (IOException ex){
throw new CustomException(ex);
}
}
}

我有一个 CustomException 类

CustomException.java

@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
public class CustomException extends Exception {

public CustomException(Throwable cause) {
super(cause);
}

}

我想测试是否抛出了 CustomException。我正在使用 Mockito。我已尝试以下操作,但 given 语句似乎没有获取方法中的 (readValue) 代码行

CustomServiceTest.java

public class CustomServiceTest {

private final ApplicationProperties props = mock(ApplicationProperties.class);
private final CustomService customService = new CustomService(props);
private static final ObjectMapper objectMapper = new ObjectMapper();

@Test
public void CustomExceptionIsThrown() throws Exception {
ObjectMapper mapper = mock(ObjectMapper.class);
given(mapper.readValue(anyString(), any(TypeReference.class))).willThrow(new IOException("This is a test"));
String json = "{\"actions\":[\"ac1\",\"ac2\",\"ac3\",\"ac4\"]}";
JsonNode d = objectMapper.readTree(json);
assertThrows(CustomException.class, () ->
customService.method(d));
}
}

运行测试时出现以下错误

Expected exception.CustomException to be thrown, but nothing was thrown..

如果有帮助,我们将不胜感激。

最佳答案

我也遇到了同样的问题,我发现虽然我像“一样模拟objectMapper”when(objectMapper.readValue(anyString(), any(TypeReference.class))).thenReturn(xxxx);”但是当我调用测试时,readValue(xx,xx)的第一个参数是null 应该是一个 String 对象。因此,您可能需要再次检查 readValue 方法输入参数。希望它会有所帮助。

关于java - 用于类型引用的 Mockito 匹配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57960396/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com