gpt4 book ai didi

java - 如何模拟服务和测试 POST Controller 方法

转载 作者:行者123 更新时间:2023-11-28 20:07:31 27 4
gpt4 key购买 nike

期望 Controller 方法返回新创建的天气资源,但响应体为空。

模拟服务以在调用服务方法时返回天气资源。

天气资源的POST方法:

    @ApiOperation("Creates a new weather data point.")
public ResponseEntity<Weather> createWeather(@Valid @RequestBody Weather weather) {
try {
Weather createdWeather = weatherService.createWeather(weather);

return ResponseEntity.ok(createdWeather);
} catch(SQLException e) {
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}

测试:

    @Test
public void createWeather_200() throws Exception {
Weather weather = new Weather(null, "AC", new Date(1560402514799l), 15f, 10, 2);
Weather createdWeather = new Weather(1, "AC", new Date(1560402514799l), 15f, 10, 2);

given(service.createWeather(weather)).willReturn(createdWeather);

MvcResult result = mvc.perform(post("/weather")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(weather)))
.andExpect(status().isOk())
.andExpect(jsonPath("$['id']", is(createdWeather.getId())));

}

测试适用于 GET 和 DELETE 方法。会不会是测试中给定的天气对象与 Controller 中创建的实际对象不匹配?

最佳答案

您是在告诉 Mockito 您期望将确切的 weather 对象作为输入。

当您调用 mvc 时,虽然对象被转换为 JSON,然后被解析并最终作为与您传递给 Mockito 的实例不同的实例传递给 Service

一种解决方案是使用通配符,如下所示:

given(service.createWeather(Mockito.any(Weather.class))).willReturn(createdWeather);

关于java - 如何模拟服务和测试 POST Controller 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56641583/

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