如何在Spring Junit中创建会话

grep

我有这样的层:

Spring Controller->服务层-> Dao层(JPA)。

我想编写服务和控制器的测试用例。在另一个Junit中将调用控制器,控制器将调用服务,服务层获取数据库信息等。

在这种情况下,我不需要模拟,我只想编写junit测试用例(我必须调用service,并且service必须从数据库中获取真实数据)。

我只有一个问题,服务层从会话获取用户的ID。我得到带有自动装配注释的会话。如何在测试用例中创建假会话?

ps我认为模拟不适合我...因为我不会模拟我的服务,所以我想用真实的db数据创建控制器的真实调用...

grep

我们可以做模拟。这是代码示例。

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();
        }

我们也可以使用这种方法,您只需调用startSession()方法,就会返回“当前”会话。

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));
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章