【问题标题】:junit test delete method with spring使用spring的junit测试删除方法
【发布时间】:2015-06-06 09:33:01
【问题描述】:

我为删除方法做了以下测试方法。测试状态时我得到 200 ok,现在我需要在调用 web 服务后测试,确保学生被删除我使用此代码来制作它

.andExpect(jsonPath("$.id").value(s.getId().intValue()))

但是获取异常json不能为null或emty,谁能帮我测试一下删除方法吗?

@Test
public void testDelete() throws Exception {
  Student s = data.getAll();
  ResultActions perform = mockMvc.perform(
      delete(studentWebservice.URL + "/{id}", m.getId()));
  perform.andDo(print())
      .andExpect(status().isOk())
      .andExpect(jsonPath("$.id").value(s.getId().intValue()))
      .andExpect(jsonPath("$.name").value(s.name));
}

服务中的方法

@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public void delete(@PathVariable Long id);

方法实现

@Override
public void delete(@PathVariable Long id) {
    repo.delete(id);
}

【问题讨论】:

  • 您正在测试的删除方法是否在响应中发回 JSON?代码在哪里?
  • 我编辑帖子并添加删除方法
  • 您的方法返回 void。因此 HTTP 响应正文将为空。然而,您正试图将其解析为 JSON 并从中提取一个 id 和一个名称。这没有意义。
  • 你能帮我吗?
  • 方法的约定是删除资源,什么也不返回。所以在控制器测试中模拟服务,并验证它的 delete() 方法是否被调用。或者,如果它是一个集成测试并且服务未被模拟,则发送另一个获取资源的请求,并检查您是否收到 404(因为资源应该已被删除)

标签: java spring testing junit


【解决方案1】:

您的服务在删除时不会返回任何内容,因此您无法以这种方式对其进行检查。 让它返回一个 json 对象,如下所示。

@Override public Student delete(@PathVariable Long id {
    Student s = repo.get(id);
    repo.delete(id);
    return s;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2016-04-24
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多