使用模拟对象为rest post方法创建测试
我在rest controller中有post方法,我想为此方法创建一个测试: 这是我的方法:使用模拟对象为rest post方法创建测试,rest,testing,post,mockito,Rest,Testing,Post,Mockito,我在rest controller中有post方法,我想为此方法创建一个测试: 这是我的方法: @PostMapping("/persons") public ResponseEntity<PersonDto> createPerson(@RequestBody PersonDto personDto) { try { personService.createPerson(personDto); return ResponseEntity.ok
@PostMapping("/persons")
public ResponseEntity<PersonDto> createPerson(@RequestBody PersonDto personDto) {
try {
personService.createPerson(personDto);
return ResponseEntity.ok(personDto);
} catch (Exception e) {
return ResponseEntity.badRequest().build();
}
}
@PostMapping(“/人”)
公共响应实体createPerson(@RequestBody PersonDto PersonDto){
试一试{
personService.createPerson(personDto);
返回ResponseEntity.ok(personDto);
}捕获(例外e){
返回ResponseEntity.badRequest().build();
}
}
我不知道这个模拟测试应该是什么样子。当您使用Spring时,我建议您使用
@WebMvcTest
模拟除被测控制器之外的所有东西。您应该显式地模拟此控制器的依赖项。在您的情况下,模拟
personService
字段就足够了。在测试类中声明一个用
@MockBean
注释的personService
字段,以创建将添加到Spring上下文的类的Mockito mock。然后记录此模拟的行为。
这里有两个分支:它工作,出现异常。 因此,您可以定义两种测试方法,并在每种方法中记录特定的行为。
最后断言从控制器得到的响应。我已经有了删除方法的测试。是的,我使用springboot、jpa、rest、h2:
@Test
public void shouldDeletePersonById() throws Exception {
Mockito.doCallRealMethod().when(personService).deleteById(1L);
mockMvc.perform(delete("/persons/{id}", 1L)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isNotFound());
}
但对于创造人来说,这对我来说很难。我不知道我应该在posy方法中调用什么(比如在delete中,我调用id来查找我想要删除的内容)