使用模拟对象为rest 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

我在rest controller中有post方法,我想为此方法创建一个测试: 这是我的方法:

@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来查找我想要删除的内容)