@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";
}
java.lang.AssertionError: Model attribute 'company'
Expected: hasProperty("name",is "companyName")
but: was null
我认为这是因为控制器因重定向而转向GET方法.当我删除此重定向时一切正常,但我不想删除该重定向.
编辑(GetMapping):
@GetMapping({"/","/companies"})
public String displayCompanies(Model model) {
model.addAttribute("company",new Company());
List
最佳答案
您需要修改您的方法.如果POST到控制器方法,并且它返回一个Redirect,你将无法访问该控制器设置的任何模型信息,它只返回带有Location Header的HTTP 302给客户端告诉它要去的新url(在这种情况下GET /公司).如果这是严格的单元测试,那么您可以测试此方法的范围.
我会考虑将其视为集成测试,并将测试更改为两个单独的步骤:
> POST / companies并验证响应是否为预期的重定向
> GET /公司并确认返回的公司列表包含您在步骤1中发布的新公司
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。