【问题标题】:Adding model attribute to spring MockMvc call将模型属性添加到 spring MockMvc 调用
【发布时间】:2018-06-26 13:12:00
【问题描述】:

我正在为一个简单的控制器编写测试。

控制器检查模型属性“ADDED_OBJECT”是否存在,并在模型属性缺失时返回成功页面和错误页面。 测试错误路径没有问题,但我不知道如何触发成功路径,通常在成功的 POST (Post/Redirect/Get) 模式之后执行。 是否可以将模型属性添加到 mockMvc 调用中?

控制器:

@GetMapping("/added")
public String addedContract(Model model) {
    if (!model.containsAttribute(ADDED_OBJECT)) {
        return ERROR_400;
    }
    return "added";
}

测试:

@Test
public void added() throws Exception {
    mockMvc.perform(get("/added"))
            .andExpect(status().isOk())
            .andExpect(content().string(not(containsString("400"))));
}

谢谢

【问题讨论】:

  • 在这里查看我的答案。尽管问题不同,但解决方案是相同的stackoverflow.com/questions/48156808/…
  • 我想我明白你的意思了。但是当我这样尝试时我无法让它工作:Model mockModel = mock(Model.class); when(mockModel.containsAttribute(ADDED_OBJECT)).thenReturn(true);
  • 你遇到了什么错误
  • 模型只是空的

标签: spring testing mockmvc modelattribute


【解决方案1】:

最简单的方法是像这样设置 flashAttribute

 mockMvc.perform(get("/added").flashAttr("ADDED_OBJECT", "SomeObject"))

通过这种方式,您可以控制传递给控制器​​中模型对象的内容,并相应地为各种用例设计测试。

【讨论】:

  • 这工作谢谢!我尝试了 param、requestattr 和 sessionattr 但没有尝试 flashAttr ...
猜你喜欢
  • 1970-01-01
  • 2016-02-15
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 2015-08-28
相关资源
最近更新 更多