2014-10-13 2 views
2

Я пытаюсь проверить метод с этой подписью:тест MVC контроллера с атрибутом сеанса

@Autowired 
HttpSession http_Session; 
@RequestMapping(method=RequestMethod.GET, value="/search/findByName") 
public @ResponseBody List<Map> search(@RequestParam(value="name", required=true) String name){ 
Integer user_id = http_Session.getAttribute("userinfo"); 
} 

UserInfo является классом, который содержит информацию о пользователе и установленный в рамках сеанса, когда пользователь вошел in.but когда я пытаюсь тест:

@RunWith(SpringJUnit4ClassRunner.class) 
@WebAppConfiguration 
@ContextConfiguration(locations = { 
    "classpath:/META-INF/applicationContext.xml"}) 

public class userControllerTest { 

private MockMvc mockMvc; 
@Autowired 
private WebApplicationContext webApplicationContext; 

@Before 
public void setUp() { 
    MockitoAnnotations.initMocks(this); 
    this.mockMvc = MockMvcBuilders.webAppContextSetup(this.webApplicationContext).build(); 
} 
@Test 
public void userTest() throws Exception { 
    mockMvc.perform(MockMvcRequestBuilders.get("/search/findByName").param("name", "bob")) 
      .andDo(print()) 
      .andExpect(MockMvcResultMatchers.status().isOk()); 
    } 

проблема атрибут класса UserInfo установлена ​​в другом методе так, когда я пытаюсь получить доступ к нему в этом методе я получил NullPointerException, и автоматическое связывание с HTTPSession я получил новую сессию для каждого метода я должен проверить.

Что мне делать с атрибутом сеанса, мой метод не принимает параметр сеанса, и для каждого теста он создает WebApplicationContext с новым сеансом.

ответ

9

Попробуйте это:

HashMap<String, Object> sessionattr = new HashMap<String, Object>(); 
sessionattr.put("userinfo", "XXXXXXXX"); 

mockMvc.perform(MockMvcRequestBuilders.get("/search/findByName").sessionAttrs(sessionattr).param("name", "bob")) 
      .andDo(print()) 
      .andExpect(MockMvcResultMatchers.status().isOk()); 
+1

Большое спасибо .its работает нормально – Alex2330