java - 如何在 Spring Junit 中创建 session

标签 java spring unit-testing junit spring-test

我有这样的图层:

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

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

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

我只有一个问题,服务层从 session 中获取用户 ID。我得到了带有 Autowiring 注释的 session 。如何在测试用例期间创建假 session ?

p.s 我认为模拟不适合我...因为我不习惯模拟我的服务,我想用真实的数据库数据创建 Controller 的真实调用...

最佳答案

我们可以用 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()方法,就会返回“当前” session 。

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

关于java - 如何在 Spring Junit 中创建 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27102878/

相关文章:

python - 对对象方法使用 Python 模拟的 autospec 的正确方法是什么?

java - 我的数组中的链接列表不起作用

java - Spring JOOQ 生成部分失败

unit-testing - 如何最好地对使用 IServiceGateway 调用其他内部服务的 ServiceStack 服务进行单元测试

android - 如何/我应该使用 Mockito 对 EventBus 事件进行单元测试?

spring - 在 Spring Boot 中设计可定制的 ERP

java - 日本日期验证 - 比较

java - 没有找到测试 Testng

java - 如何引用子实例的父实例

java - Spring应用程序连接Mysql数据库时出现问题