Spring OAuth2.0 單元測(cè)試解決方案
為什么需要單元測(cè)試
單元測(cè)試擁有保證代碼質(zhì)量、盡早發(fā)現(xiàn)軟件 Bug、簡(jiǎn)化調(diào)試過程、促進(jìn)變化并簡(jiǎn)化集成、使流程更靈活等優(yōu)勢(shì)。單元測(cè)試是針對(duì)代碼單元的獨(dú)立測(cè)試,核心是“獨(dú)立”,優(yōu)勢(shì)來源也是這種獨(dú)立性,而所面臨的不足也正是因?yàn)槠洫?dú)立性:既然是“獨(dú)立”,就難以測(cè)試與其他代碼和依賴環(huán)境的相互關(guān)系。單元測(cè)試與系統(tǒng)測(cè)試是互補(bǔ)而非代替關(guān)系。單元測(cè)試的優(yōu)勢(shì),正是系統(tǒng)測(cè)試的不足,單元測(cè)試的不足,又恰是系統(tǒng)測(cè)試的優(yōu)勢(shì)。不能將單元測(cè)試當(dāng)做解決所有問題的萬金油,而需理解其優(yōu)勢(shì)與不足,揚(yáng)長(zhǎng)避短,與系統(tǒng)測(cè)試相輔相成,實(shí)現(xiàn)測(cè)試的最大效益。
OAuth2 系統(tǒng)單元測(cè)試?yán)щy
- 接口測(cè)試依賴于 UPMS (用戶權(quán)限管理),無法做到解耦獨(dú)立
- spring-security-test 模塊未提供相關(guān)標(biāo)準(zhǔn)實(shí)現(xiàn)
- 場(chǎng)景復(fù)雜既要包含無狀態(tài) token 調(diào)用,又要保證上線文傳遞業(yè)務(wù)
解決方案
參考 @WithMockUser ,在 Mock 攔截器中自動(dòng)執(zhí)行相關(guān)的增強(qiáng)(token 獲取),并通過擴(kuò)展 WithSecurityContextFactory 實(shí)現(xiàn)上下文 token 的傳遞。具體可以參考源碼 pig-common-test[1]
引入依賴
<dependency>
<groupId>com.pig4cloud</groupId>
<artifactId>pig-common-test</artifactId>
<version>${last.version}</version>
<scope>test</scope>
</dependency>
單元測(cè)試 Controller 接口
指定認(rèn)證中心接口
配置在 test/resources/application.yml
security: oauth2: client: access-token-uri: http://pig-gateway:3000/oauth/token
模擬測(cè)試 controller 接口
@RunWith(SpringRunner.class)
@SpringBootTest
public class SysLogControllerTest {
private MockMvc mvc;
@Autowired
private WebApplicationContext applicationContext; // 注入WebApplicationContext
@Before
public void setUp() {
this.mvc = MockMvcBuilders.webAppContextSetup(applicationContext).build();
}
@Test
@SneakyThrows
@WithMockOAuth2User
public void testMvcToken() {
mvc.perform(delete("/log/1").with(token())).andExpect(status().isOk());
}
}
模擬測(cè)試 FeignClient 傳遞 token
直接注入 FeignClient 實(shí)現(xiàn)即可 使用 @WithMockOAuth2User 注解測(cè)試類即可
WithMockOAuth2User 屬性說明
當(dāng)前用例獲取 token 使用的用戶名
String username() default "admin";
當(dāng)前用例獲取 token 使用的密碼
String password() default "123456";
寫在最后
源碼參考 pig-common-test[1] 模塊
目前僅在 pig 2.10 做了實(shí)現(xiàn),理論支持低版本,直接 install 此模塊即可
參考資料
[1] pig-common-test: https://gitee.com/log4j/pig/tree/master/pig-common/pig-common-test
到此這篇關(guān)于Spring OAuth2.0 單元測(cè)試解決方案的文章就介紹到這了,更多相關(guān)Spring OAuth2.0 單元測(cè)試內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis-Plus之ID自動(dòng)增長(zhǎng)的設(shè)置實(shí)現(xiàn)
本文主要介紹了Mybatis-Plus之ID自動(dòng)增長(zhǎng)的設(shè)置實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之時(shí)間復(fù)雜度與空間復(fù)雜度
對(duì)于一個(gè)算法,其時(shí)間復(fù)雜度和空間復(fù)雜度往往是相互影響的,當(dāng)追求一個(gè)較好的時(shí)間復(fù)雜度時(shí),可能會(huì)使空間復(fù)雜度的性能變差,即可能導(dǎo)致占用較多的存儲(chǔ)空間,這篇文章主要給大家介紹了關(guān)于Java時(shí)間復(fù)雜度、空間復(fù)雜度的相關(guān)資料,需要的朋友可以參考下2022-02-02
Spring?Boot使用MyBatis進(jìn)行兩個(gè)表的關(guān)聯(lián)
本文主要介紹了Spring?Boot使用MyBatis進(jìn)行兩個(gè)表的關(guān)聯(lián),通過實(shí)例演示了如何使用MyBatis的XML映射文件和注解實(shí)現(xiàn)關(guān)聯(lián)操作,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09
SpringBoot打印系統(tǒng)執(zhí)行的sql語句及日志配置指南
這篇文章主要給大家介紹了關(guān)于SpringBoot打印系統(tǒng)執(zhí)行的sql語句及日志配置的相關(guān)資料,在Java SpringBoot項(xiàng)目中如果使用了Mybatis框架,默認(rèn)情況下執(zhí)行的所有SQL操作都不會(huì)打印日志,需要的朋友可以參考下2023-10-10
Spring-Smart-DI 動(dòng)態(tài)切換實(shí)現(xiàn)類的步驟
文章介紹了如何使用spring-smart-di的@AutowiredProxySPI注解來實(shí)現(xiàn)動(dòng)態(tài)切換服務(wù)提供商的功能,通過配置點(diǎn)和代理對(duì)象,實(shí)現(xiàn)動(dòng)態(tài)切換而無需重啟服務(wù),感興趣的朋友一起看看吧2025-03-03
Java中Long類型傳入前端數(shù)值出錯(cuò)問題
這篇文章主要介紹了Java中Long類型傳入前端數(shù)值出錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
Spring Data Redis對(duì)象緩存序列化問題解決
相信在項(xiàng)目中,你一定是經(jīng)常使用Redis,在使用時(shí),有沒有遇到同我一樣,對(duì)象緩存序列化問題的呢,本文主要介紹了Spring Data Redis對(duì)象緩存序列化問題解決,感興趣的可以了解一下2024-01-01
Spring Boot 中該如何防御計(jì)時(shí)攻擊
這篇文章主要介紹了Spring Boot 中該如何防御計(jì)時(shí)攻擊,幫助大家更好的使用spring boot框架,感興趣的朋友可以了解下2020-09-09
MyBatis-Plus集成Druid環(huán)境搭建的詳細(xì)教程
這篇文章主要介紹了MyBatis-Plus集成Druid環(huán)境搭建的詳細(xì)教程,需要的朋友可以參考下2020-08-08
SpringMVC+Mysql實(shí)例詳解(附demo)
本篇文章主要介紹了SpringMVC+Mysql實(shí)例詳解(附demo),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。2016-12-12

