【发布时间】:2017-08-23 14:27:14
【问题描述】:
我有一个测试:
@Test
public void shouldAddCompany() throws Exception {
mockMvc.perform(post("/companies")
.param("name", "companyName"))
.andExpect(model().attribute("company",
hasProperty("name", is("companyName"))));
}
我的控制器方法看起来像这样:
@PostMapping("/companies")
public String displayCompaniesPost(@ModelAttribute Company company) {
companyService.save(company);
return "redirect:/companies";
}
如何在测试中查看公司属性?由于重定向和状态 302 存在问题。
java.lang.AssertionError: Model attribute 'company'
Expected: hasProperty("name", is "companyName")
but: was null
我认为这是因为控制器将因为重定向而使用 GET 方法。当我删除此重定向时,一切正常,但我不想删除该重定向。
编辑(获取映射):
@GetMapping({"/", "/companies"})
public String displayCompanies(Model model) {
model.addAttribute("company", new Company());
List<Company> companies = companyService.findAll();
model.addAttribute("companies", companies);
return "companies";
}
我认为问题是因为在getMapping中添加了同名的属性,但是当我删除它时,它仍然不起作用。
【问题讨论】:
-
你能告诉我们你要重定向的路径的控制器方法是什么样的吗(
@GetMapping("/companies"))? -
@Ben 好的,我已经编辑了第一篇文章。我认为问题是因为在getMapping中添加了同名的属性,但是当我删除它时,它仍然不起作用。 :(
-
您的测试期望 Companies 属性的名称为
"companyName",但在 GET 中您要添加一个新的Company,我认为它没有名称。您的测试可能应该寻找companies,因为这是您要重定向到的控制器方法返回的属性。
标签: spring spring-mvc testing spring-boot mocking