gre*_*rep 3 java junit spring unit-testing spring-test
我有这样的层:
Spring Controller -> 服务层 -> Dao 层(JPA)。
我想编写服务和控制器的测试用例。在另一个 Junit 中会调用控制器,控制器会调用服务,服务层获取数据库信息等等。
在这种情况下,我不想模拟,我只想编写 junit 测试用例(我必须调用服务并且服务必须从数据库中获取真实数据)。
我只有一个问题,服务层从会话中获取用户 ID。我得到了带有自动装配注释的会话。如何在测试用例期间创建假会话?
ps 我认为 mock 不适合我......因为我不会嘲笑我的服务,我想用真实的数据库数据创建真正的控制器调用......
我们可以用模拟来做。这是代码示例。
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));
    }
| 归档时间: | 
 | 
| 查看次数: | 15133 次 | 
| 最近记录: |