加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

带控制器重定向的Spring MVC测试发布方法

发布时间:2020-12-15 01:26:24 所属栏目:大数据 来源:网络整理
导读:我有一个测试: @Testpublic void shouldAddCompany() throws Exception { mockMvc.perform(post("/companies") .param("name","companyName")) .andExpect(model().attribute("company",hasProperty("name",is("companyName"))));} 我的控制器方法看起来像

我有一个测试:

@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):

@GetMapping({"/","/companies"})
public String displayCompanies(Model model) {
    model.addAttribute("company",new Company());
    List

我认为问题是因为在getMapping中添加了具有相同名称的属性,但是当我删除它时,它仍然无效.

最佳答案
您需要修改您的方法.如果POST到控制器方法,并且它返回一个Redirect,你将无法访问该控制器设置的任何模型信息,它只返回带有Location Header的HTTP 302给客户端告诉它要去的新url(在这种情况下GET /公司).如果这是严格的单元测试,那么您可以测试此方法的范围.

我会考虑将其视为集成测试,并将测试更改为两个单独的步骤:

> POST / companies并验证响应是否为预期的重定向
> GET /公司并确认返回的公司列表包含您在步骤1中发布的新公司

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读