簡單談談
在我們進行開發(fā)過程中,單元測試是保證代碼質量的最有利工具关炼,我們每個方法都要有對應的測試涩笤,在目前開發(fā)規(guī)范中,主要把測試分為單元測試和集成測試锰瘸,我們的公用方法都要寫自己的單元測試刽严,而web api的每個接口都要寫集成測試。
redis session
分布式環(huán)境下避凝,單機的session是不能滿足我們需求的舞萄,所以session存儲的中間件就出現了,比較常用的有數據庫和redis兩種管削,在springboot框架里倒脓,也集成了redis session的實現。
安裝依賴包
'org.springframework.session:spring-session-data-redis',
配置注入
/**
* Spring Session含思,代替了傳統(tǒng)的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
在測試環(huán)境里崎弃,我們可以使用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出來的缀踪。
愿與諸君共進步,大量的面試題及答案還有資深架構師錄制的視頻錄像:有Spring虹脯,MyBatis驴娃,Netty源碼分析,高并發(fā)循集、高性能唇敞、分布式、微服務架構的原理,JVM性能優(yōu)化疆柔、分布式架構等這些成為架構師必備的知識體系咒精,可以微信搜索539413949獲取,最后祝大家都能拿到自己心儀的offer