【发布时间】:2019-08-13 20:53:23
【问题描述】:
我有一个控制器映射
@RequestMapping(value = "/something", method = RequestMethod.GET)
public String get(@RequestParam("id") Person aPerson, Model aModel) {
aModel.addAttribute("person", aPerson);
return "index";
}
如何通过 MockMvc 进行测试?
我可以做这样的事情
mockMvc.perform(get("/something?id=1")).andExpect(status().is2xxSuccessful());
但这不起作用,因为 RequestParam 是一个对象,而不是一个字符串。转换由 Spring 完成,但我正在对该方法进行单元测试,并且不想启动应用程序上下文。如何使用 MockMvc 对这样的东西进行单元测试?
【问题讨论】:
-
如果您必须记录您的 HTTP API 以便客户端可以使用它,您会怎么做?你会说哪些参数可以传递?如果你不知道,那就有问题了,因为你不知道你创建的 API 可以如何使用。如果您知道,那么您就有了答案:发送您的 API 期望的参数:您的测试是您的 API 的客户端。您使用 POJO 来收集它们的事实是一个实现细节。
-
我正在为一些遗留代码编写缺少的单元测试,所以我没有编写控制器。我可以在不使用 MockMvc 的情况下轻松地对其进行单元测试,只需调用该方法并断言 String 响应是正确视图的路径,同时验证模型是否包含属性“person”。我的问题是如何通过 MockMvc 来完成,因为我养成了使用上述模式编写所有其他单元测试的习惯。
-
API 需要一个名为“id”的参数。查看 Person 的代码就知道这个 ID 的类型应该是什么。
-
@JohnDoe 你看过我的回答了吗?应该工作。