我試圖使用Spring測試MVC測試控制器方法。春季測試MVC:測試控制器重定向到另一個控制器
我有一個控制器,處理表單提交,並堅持一個新的條目到數據庫。
如果該方法是成功的,控制器執行重定向到另一個控制器(第二控制器從一個路徑變量檢索實體的ID,從數據庫中檢索它,填充模型的屬性,並顯示詳細信息頁面爲新持久實體) 。
在第一個控制器中,沒有屬性添加到Model或RedirectAttributes上。
這是控制器的方法,我試圖測試:
@RequestMapping("/save/{templateId}/{configParameterId}")
public String saveGatewayPPTPConfigParameter(@PathVariable Long templateId, @PathVariable Long configParameterId, @Valid GatewayPPTPConfigParameterForm configParameterForm, BindingResult bindingResult, HttpServletRequest request,
RedirectAttributes flash, Model model) {
...
...
... Code omitted
...
return "redirect:/admin/gateway/config/template/details" + newTemplate.getId()+ "#tab_3";
}
如果此方法成功執行,則在第二控制器下面的代碼將填充與某些屬性的模型:
@RequestMapping(value = "/details/{templateId}", method = RequestMethod.GET)
public String viewConfigTemplateDetails(@PathVariable Long templateId, Model model) throws IOException, ServletException, WifireAdminSessionException, WifireAdminException {
....
....
....Code ommited
....
....
model.addAttribute("configTemplate", gatewayConfig);
return "/admin/gateway/config/template/details";
}
考慮我的測試中的這個片段:
mvc.perform(
post("/admin/gateway/config/parameter/save/{templateId}/{configParameterId}", 6 , 8)
.param("name", "name")
.param("value", "value")
.param("typeId", "3")
.param("parameterId", "2")
.param("readOnly", "false"))
.andDo(
MockMvcResultHandlers.print()
)
.andExpect(status().is3xxRedirection())
.andExpect(view().name("redirect:/admin/gateway/config/template/details/"+mapping.getId()+"#tab_3"));
該測試通過但如果我補充一下:
.andExpect(model().attribute("configTemplate", hasProperty("id",is(4l))))
它失敗,因爲configTemplate
模型屬性爲空。
如果第二個控制器已成功執行,則會填充configTemplate
。爲什麼expectedView
是正確的,但第二個控制器似乎沒有執行?
你能添加更多信息嗎?就像控制器代碼一樣,不是完整的代碼,而是方法定義,模型的改變以及方法與視圖的返回。 – reos
我添加了您請求的信息。 –