我正在开发我的第一个有后端和前端的spring boot应用程序。现在,我正在为后端的控制器编写单元测试,以测试控制器响应代码。我的控制器测试类如下所示:
@WebMvcTest(controllers = HorseEndpoint.class)
@ActiveProfiles({"test", "datagen"})
public class HorseEndpointTest {
@MockBean //the dependencies the controller class needs
private HorseService horseService;
@MockBean
private HorseMapper horseMapper;
@Autowired
private MockMvc mockMvc;
@Autowired
ObjectMapper objectMapper;
Horse horseA = new Horse(-50L, "Pferd 1", null, new Date(0), Gender.MALE, null, null, null);
@Test
@DisplayName("Adding a valid horse should return the horse")
public void addingHorse_valid_shouldReturnHorse() throws Exception {
Mockito.when(horseService.addHorse(horseA)).thenReturn(horseA);
mockMvc.perform(post("/horses")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(horseMapper.entityToDto(horseA)))
.characterEncoding("utf-8"))
.andExpect(status().is(201))
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$.length()").value(1))
.andDo(print());
}
}
POST的Controller类中的代码如下所示:
@RestController
@RequestMapping("/horses")
public class HorseEndpoint {
@PostMapping(value = "")
@ResponseStatus(HttpStatus.CREATED)
public HorseDto addHorse(@RequestBody HorseDto horseDto) {
Horse horse = horseMapper.dtoToEntity(horseDto);
try {
horse = horseService.addHorse(horse);
} catch (ValidationException v) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "The horse data provided is invalid: " + v.getMessage(), v);
}
return horseMapper.entityToDto(horse);
}
}
问题是,我一运行测试,输出文件就会显示这个错误:
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 3.046 s <<< FAILURE! - in endpoint.HorseEndpointTest
addingHorse_valid_shouldReturnHorse Time elapsed: 0.124 s <<< FAILURE!
java.lang.AssertionError: Response status expected:<201> but was:<400>
请注意,从前端调用POST方法没有任何问题。validationexception
类型的异常只在服务层中抛出,但由于我用mockito.when()覆盖了函数addHorse(),所以那里的验证永远不会发生,对吗?所以我的猜测是,它无法从测试类中的Dto创建一个有效的JSON来传递给控制器。我已经看了其他相关的SO问题,但没有一个解决方案似乎是有效的。注意:我已经检查了来自测试类和Dto类的日期类型是否一致。
我真的很感谢任何帮助!
您的控制器不知道您在测试中创建的被嘲弄的horseservice
。你必须以某种方式注入控制器。
您可以在https://thepracticaldeveloper.com/guide--boot-controller-tests/#mockitoextension-and-mockmvc上看到一些关于如何执行该操作的示例
使用接受JSON请求体的Spring MVC开发REST Web服务。并进一步处理接收到的消息。我使用以下:Eclipse,Tomcat,Spring 3.0.1,Jackson lib,Curl来测试Web服务 返回 我的控制器类 我的人类
问题内容: 我在SpringMVC项目中将新的Java API(JSR 353)用于JSON。 这个想法是生成一些Json数据并将其返回给客户端。我所拥有的控制器看起来像这样: 当我访问它时,我没有得到JSON的预期表示,而是得到了这些: 为什么是这样?到底是怎么回事?以及如何使其正确返回预期的JSON? 问题答案: 当您意识到新的JSR 353 API 没有特殊要求时,答案很简单。相反,在这种情
我正在尝试对服务类进行单元测试,但模拟返回null 在上面的代码中,当调用到达服务类时为空。我不知道我是否错过了什么。我尝试使用和运行,但结果相同。感谢任何帮助。 提前谢谢你。
我无法将图像上传到服务器中的特定目录。多部分文件变量总是空的,这里我的代码 配置Bean 领域类别 控制器类 前端:addproduct.jsp 我不知道为什么不工作。提前感谢您的帮助。
我有两个片段(片段A和片段B),都有折叠工具栏布局和协调布局中对应的RecycerViews。