How to create session in Spring Junit
Solution 1
We can do with mock. Here is sample of code.
private MockMvc mockMvc;
@Autowired
private FilterChainProxy springSecurityFilterChain;
@Autowired
private WebApplicationContext wac;
protected MockHttpSession session;
protected MockHttpServletRequest request;
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).addFilters(this.springSecurityFilterChain).build();
}
@Test
void test(){
// I log in and then returns session
HttpSession session = mockMvc.perform(post("/j_spring_security_check").param("NAME", user).param("PASSWORD", pass))
.andDo(print()).andExpect(status().isMovedTemporarily()).andReturn().getRequest().getSession();
}
Also we can do with this way, you can just to call startSession() method, and there will be "current" session returned.
protected void startSession() {
session = new MockHttpSession();
}
protected void endSession() {
session.clearAttributes();
session = null;
}
// we can create request too, just simple way
protected void startRequest() {
request = new MockHttpServletRequest();
request.setSession(session);
RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request));
}
Solution 2
You can use MockHttpSession: http://docs.spring.io/spring-framework/docs/2.5.6/api/org/springframework/mock/web/MockHttpSession.html
More info here: Spring mvc 3.1 integration tests with session support
grep
I'm design-minded software engineer passionate about building stable and scalable services. As a developer, I love clean, well structured, testable and efficient code. Experienced with contributing Apache open source projects. I'm interested in doing challenging projects where I can be given opportunities to make a meaningful impact.
Updated on June 06, 2022Comments
-
grep almost 2 years
I have such layers:
Spring Controller -> Services layer -> Dao Layer (JPA).
I want to write test cases of services and controller. In the other Junit will invoke controller, controller will invoke services, service layer gets database information and etc..
In this case I do not want mocking, I want just to write junit test case (I must invoke service and service must get real data from database).
I have only one problem, service layer get's user id from session. I get session with autowired annotation. How can I create fake session during test cases?
p.s I think mock is not for me... because I do not wont to mock my service, I want to create real invoke of controller with real db data...