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出来的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.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修饰符