java - 带有 session 对象的 Spring Junit - 在 Controller 中不可见

标签 java spring session junit spring-junit

简单测试类具有以下内容:

@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/

相关文章:

java - 自动将 Maven 编译的 jar 上传到 FTP 位置?

java - 使用 Retrofit/GSON 如何处理有时为空而有时为空的响应

java - 如何从变量分配 Spring Model 的列名

java - 对服务器和远程 JMX bean 使用相同的端口

Magento + Redis,完整的 session 目录?

java - 为 SceneBuilder (JavaFX) 构建自定义组件

java - 抽象类的非抽象方法线程安全

java - ModelMap 是空的吗?

asp.net - HttpHandler 和 session 状态的问题

javascript - session过期如何防止表单数据丢失?