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出来的。

posted @   张占岭  阅读(1612)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2018-01-18 重写equals的详细说明
2016-01-18 知方可补不足~sqlserver中使用ROW_NUMBER进行的快速分页
2013-01-18 爱上MVC~Razor引擎时,在遍历中巧用Output.Write方法
2013-01-18 Jquery真的不难~第八回 JS的闭包问题
2013-01-18 JQuery真的不难~第六回 JQ中的异步调用方式~续
2012-01-18 小小的架构,小小的我
2012-01-18 Js~实现public和private对象,即static修饰符
点击右上角即可分享
微信分享提示