微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring OAuth2.0 单元测试解决方案

这篇文章主要介绍了Spring OAuth2.0 单元测试解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

为什么需要单元测试

单元测试拥有保证代码质量、尽早发现软件 Bug、简化调试过程、促进变化并简化集成、使流程更灵活等优势。单元测试是针对代码单元的独立测试,核心是“独立”,优势来源也是这种独立性,而所面临的不足也正是因为其独立性:既然是“独立”,就难以测试与其他代码和依赖环境的相互关系。单元测试与系统测试是互补而非代替关系。单元测试的优势,正是系统测试的不足,单元测试的不足,又恰是系统测试的优势。不能将单元测试当做解决所有问题的万金油,而需理解其优势与不足,扬长避短,与系统测试相辅相成,实现测试的最大效益。

OAuth2 系统单元测试困难

接口测试依赖于 UPMS (用户权限管理),无法做到解耦独立

spring-security-test 模块未提供相关标准实现

场景复杂既要包含无状态 token 调用,又要保证上线文传递业务

解决方

参考 @WithMockUser ,在 Mock 拦截器中自动执行相关的增强(token 获取),并通过扩展 WithSecurityContextFactory 实现上下文 token 的传递。具体可以参考源码 pig-common-test[1]

引入依赖

com.pig4cloudpig-common-test${last.version}test单元测试 Controller 接口指定认证中心接口配置在 test/resources/application.ymlsecurity: oauth2: client: access-token-uri: http://pig-gateway:3000/oauth/token模拟测试 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()); } }模拟测试 FeignClient 传递 token直接注入 FeignClient 实现即可 使用 @WithMockOAuth2User 注解测试类即可WithMockOAuth2User 属性说明当前用例获取 token 使用的用户名String username() default "admin";当前用例获取 token 使用的密码String password() default "123456";写在最后源码参考 pig-common-test[1] 模块目前仅在 pig 2.10 做了实现,理论支持低版本,直接 install 此模块即可参考资料[1] pig-common-test: https://gitee.com/log4j/pig/tree/master/pig-common/pig-common-test

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐