Spring OAuth2.0 单元测试的解决方法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
为什么需要单元测试
单元测试拥有保证代码质量、尽早发现软件 Bug、简化调试过程、促进变化并简化集成、使流程更灵活等优势。单元测试是针对代码单元的独立测试,核心是“独立”,优势来源也是这种独立性,而所面临的不足也正是因为其独立性:既然是“独立”,就难以测试与其他代码和依赖环境的相互关系。单元测试与系统测试是互补而非代替关系。单元测试的优势,正是系统测试的不足,单元测试的不足,又恰是系统测试的优势。不能将单元测试当做解决所有问题的万金油,而需理解其优势与不足,扬长避短,与系统测试相辅相成,实现测试的最大效益。
OAuth3 系统单元测试困难
解决方案
参考 @WithMockUser ,在 Mock 拦截器中自动执行相关的增强(token 获取),并通过扩展 WithSecurityContextFactory 实现上下文 token 的传递。具体可以参考源码 pig-common-test[1]
引入依赖
<dependency> <groupId>com.pig4cloud</groupId> <artifactId>pig-common-test</artifactId> <version>${last.version}</version> <scope>test</scope> </dependency>
单元测试 Controller 接口
指定认证中心接口
配置在 test/resources/application.yml
security: oauth3: 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 @WithMockOAuth3User public void testMvcToken() { mvc.perform(delete("/log/1").with(token())).andExpect(status().isOk()); } }
模拟测试 FeignClient 传递 token
直接注入 FeignClient 实现即可 使用 @WithMockOAuth3User 注解测试类即可
WithMockOAuth3User 属性说明
当前用例获取 token 使用的用户名
String username() default "admin";
当前用例获取 token 使用的密码
String password() default "123456";
关于Spring OAuth2.0 单元测试的解决方法问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。