• redisSession和mockSession


    简单谈谈

    在我们进行开发过程中,单元测试是保证代码质量的最有利工具,我们每个方法都要有对应的测试,在目前开发规范中,主要把测试分为单元测试和集成测试,我们的公用方法都要写自己的单元测试,而web api的每个接口都要写集成测试。

    redis session

    分布式环境下,单机的session是不能满足我们需求的,所以session存储的中间件就出现了,比较常用的有数据库和redis两种,在springboot框架里,也集成了redis session的实现。

    安装依赖包

    'org.springframework.session:spring-session-data-redis',
    

    配置注入

    /**
     * Spring Session,代替了传统的session.
     */
    @Configuration
    @EnableRedisHttpSession
    public class HttpSessionConfig {
    
      @Autowired
      private RedisConnectionFactory redisConnectionFactory;
    
      /**
       * redis 配置.
       */
      @Bean
      public RedisTemplate redisTemplate() {
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        return redisTemplate;
      }
    }
    

    使用session

     @Autowired HttpSession httpSession;
    

    mockSession

    在测试环境里,我们可以使用mockSession来实现对session的模拟,在进行mvc请求时,把session带在请求头上就可以了。

      MockHttpSession session;
      @Autowired
      private WebApplicationContext webApplicationContext;
      private MockMvc mockMvc;
      
        * 初始化.
       */
      @Before
      public void init() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
        session = new MockHttpSession();
        session.setAttribute("distributor", DistributorBaseInfo.builder().id(1L).build());
      }
      
      @Test
      public void testSession() throws Exception {
        mockMvc
            .perform(
                get("/v1/api/user")
                    .accept(MediaType.APPLICATION_JSON_UTF8)
                    .session(session)
                    .param("pageCurrent", "1")
                    .param("pageSize", "1"))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.records.length()").value(1));
      }
    

    上面代码中展示了,如何在单元测试中模拟session,事实上,我们http请求里的session已经被mockSession覆盖了,我们在对应的接口上打断点可以看到,session使用的是mock出来的。

  • 相关阅读:
    Redis主从同步分析(转)
    Jedis使用总结【pipeline】【分布式的id生成器】【分布式锁【watch】【multi】】【redis分布式】(转)
    PHP之PDO_MYSQL扩展安装步骤(转)
    MongoDB 那些坑(转)
    CF 222 (DIV 1)
    TC SRM601
    TC SRM600 DIV2
    Github入门教程
    2013长春区域赛总结
    退役了~~~~~~~~~~~~
  • 原文地址:https://www.cnblogs.com/lori/p/10288694.html
Copyright © 2020-2023  润新知