java.lang.AssertionError:预期状态:200 实际:400

时间:2021-05-16 10:12:17

标签: spring-boot kotlin spring-boot-test

我有一个带有以下端点的身份验证控制器

   @PostMapping("/register")
   fun register(@RequestBody body: RegisterDto): ResponseEntity<User> {
     val user = User()
     user.name = body.name
     user.email = body.email
     user.password = body.password
     return ResponseEntity.status(201).body(userService.saveUser(user))
  }

现在我已经为上面的代码片段编写了一个测试用例,如下所示

  fun `register user with valid input, returns ok`() {
    val result = mockMvc.perform(MockMvcRequestBuilders.post("/api/auth/register")
        .param("id","1")
        .param("name","Homer")
        .param("email","homer@simpsons.com")
        .param("password","123456")
        .contentType(MediaType.APPLICATION_JSON)
        .accept(MediaType.APPLICATION_JSON))
    result.andExpect(MockMvcResultMatchers.status().isOk)
}

运行时,我得到 400,我需要得到 200(成功)。我对测试弹簧靴很陌生。我可能做错了什么或遗漏了什么?万分感谢

1 个答案:

答案 0 :(得分:1)

您正在设置参数。实际上,您需要传递一个 JSON 正文,如下所示:

fun `register user with valid input, returns ok` () {
  val user = User()
  user.id = 1
  user.name = "Homer"
  user.email = "homer@simpsons.com"
  user.password = "123456"

  var response = new ObjectMapper().writeValueAsString(user)
  val result = mockMvc.perform(MockMvcRequestBuilders.post("/api/auth/register")
    .contentType(MediaType.APPLICATION_JSON)
    .content(response)
    .accept(MediaType.APPLICATION_JSON))
  result.andExpect(MockMvcResultMatchers.status().isCreated)
}