简单测试类具有以下内容:
@Autowired
private WebApplicationContext wac;
@Autowired
MockHttpSession session;
private MockMvc mockMvc;
@Before
public void before() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}
@Test
public void testSetSomeType() throws Exception {
this.session.putValue("PREV_PAGE_VAL", "FOO");
System.out.println(this.session.getAttribute("PREV_PAGE_VAL")); //FOO is there, so far so good, but in the controller, its null
RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/setSomeType").param("someType", "ACCESS_ONLY").session(session)
.accept(MediaType.parseMediaType("application/json;charset=UTF-8"));
ResultActions result = this.mockMvc.perform(requestBuilder);
result.andExpect(MockMvcResultMatchers.status().isOk());
}
..
Controller 类具有以下内容:
@RequestMapping(value = "/setSomeType", method = RequestMethod.POST)
public @ResponseBody AppResponse setSomeType(@RequestParam(value = "someType") final String someType, final HttpSession session) {
//someType has "ACCESS_ONLY"
//session.getAttribute("PREV_PAGE_VAL"); is null, expecting FOO
}
问题:为什么 session 没有 FOO?缺什么? ..
最佳答案
我不认为 Spring 可以自动链接 MockHttpSession
(我也不知道你从哪里 Autowiring 它)。
您可以手动添加。
RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/setSomeType")
.param("someType", "ACCESS_ONLY")
.accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
.session(session);
或者,您可以使用sessionAttr(String, Object)
单独添加 session 属性。
关于java - 带有 session 对象的 Spring Junit - 在 Controller 中不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30579359/