redisSession和mockSession
程序员文章站
2022-07-02 17:14:41
简单谈谈 在我们进行开发过程中,单元测试是保证代码质量的最有利工具,我们每个方法都要有对应的测试,在目前开发规范中,主要把测试分为单元测试和集成测试,我们的公用方法都要写自己的单元测试,而web api的每个接口都要写集成测试。 redis session 分布式环境下,单机的session是不能满 ......
简单谈谈
在我们进行开发过程中,单元测试是保证代码质量的最有利工具,我们每个方法都要有对应的测试,在目前开发规范中,主要把测试分为单元测试和集成测试,我们的公用方法都要写自己的单元测试,而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出来的。