OAuth 2.0 单元测试解决方案

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

为什么需要单元测试

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

OAuth2 系统单元测试困难

  • 接口测试依赖于 UPMS (用户权限管理),无法做到解耦独立
  • spring-security-test 模块未提供相关标准实现
  • 场景复杂既要包含无状态 token 调用,又要保证上线文传递业务

解决方案

参考 @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:
  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";
目录
相关文章
|
4月前
|
存储 安全 API
认证服务---OAuth2.0基本介绍,微博登录测试【上篇】
这篇文章是关于OAuth2.0的介绍和微博登录测试的教程,详细解释了OAuth2.0的基本概念和授权流程,并指导读者如何在新浪微博开放平台进行应用创建、设置回调地址,以及使用Postman工具进行授权测试,为实现第三方微博登录功能做准备。
认证服务---OAuth2.0基本介绍,微博登录测试【上篇】
|
4月前
|
测试技术 开发工具 iOS开发
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
这篇文章是iOS自动化测试方案的第三部分,介绍了在没有MacOS系统条件下,如何使用WDA(WebDriverAgent)结合Python客户端库facebook-wda和tidevice工具,在Windows系统上实现iOS应用的自动化测试,包括环境准备、问题解决和扩展应用的详细步骤。
350 1
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
|
4月前
|
运维 测试技术 持续交付
解决方案 - 自动化单元测试
解决方案 - 自动化单元测试
46 1
|
5月前
|
测试技术 持续交付 微服务
现代软件测试中的自动化挑战与解决方案
在现代软件开发中,自动化测试已经成为提高效率和质量的重要手段。然而,面对不断增长和复杂化的软件项目,自动化测试也面临诸多挑战。本文探讨了当前软件测试中的自动化挑战,并提出了一些解决方案,以帮助开发团队更好地应对这些挑战,提升测试效率和质量。 【7月更文挑战第11天】
51 1
|
6月前
|
存储 测试技术 Python
记一次线上安全测试中误用父类属性导致数据污染的解决方案
在线上安全测试的过程中,会使用 Nmap 进行端口扫描,为了提升端口扫描的效率,扫描策略通常是检测常用端口是否处于开放状态,并在父类中使用名为 all_open_ports 的属性来记录这些开放的端口。 在后续的测试过程中,需要检查所涉及的端口是否包含在 all_open_ports 中。如果不存在,就需要进一步对这些端口进行开放检测。如果端口的检测结果是开放的,测试将继续进行并将这些端口记录到 all_open_ports 中,以便在下次遇到相同端口时无需重复检测。 然而,由于安全测试是多线程进行的,某些情况下可以将 all_open_ports 理解为共享变量,这导致当两个不同的测试环境同
|
6月前
|
敏捷开发 测试技术 持续交付
敏捷开发中的软件测试策略:挑战与解决方案
随着敏捷开发方法在软件工程领域的普及,传统的软件测试流程面临着前所未有的挑战。本文将探讨敏捷开发环境下软件测试所遇到的主要问题,并提出相应的解决策略,以期为软件测试人员和项目管理者提供实用的指导和参考。
101 0
|
7月前
|
安全 数据管理 测试技术
网络安全与信息安全:防范漏洞、加强加密与提升安全意识深入探索自动化测试框架的设计原则与实践应用化测试解决方案。文章不仅涵盖了框架选择的标准,还详细阐述了如何根据项目需求定制测试流程,以及如何利用持续集成工具实现测试的自动触发和结果反馈。最后,文中还将讨论测试数据管理、测试用例优化及团队协作等关键问题,为读者提供全面的自动化测试框架设计与实施指南。
【5月更文挑战第27天】 在数字化时代,网络安全与信息安全已成为维护国家安全、企业利益和个人隐私的重要环节。本文旨在分享关于网络安全漏洞的识别与防范、加密技术的应用以及提升安全意识的重要性。通过对这些方面的深入探讨,我们希望能为读者提供一些实用的建议和策略,以应对日益严峻的网络安全挑战。 【5月更文挑战第27天】 在软件开发周期中,自动化测试作为保障软件质量的关键步骤,其重要性日益凸显。本文旨在剖析自动化测试框架设计的核心原则,并结合具体案例探讨其在实际应用中的执行策略。通过对比分析不同测试框架的优缺点,我们提出一套高效、可扩展且易于维护的自动
|
7月前
|
存储 安全 算法
光伏逆变器在环测试解决方案
本文介绍了光伏行业的背景及其在全球清洁能源发展中的重要性,随着技术进步,光伏组件成本下降,效率提升,分布式系统普及,储能技术的应用解决了光伏发电的不稳定性。光伏变流器的入网检测至关重要,涉及并网检测、电气参数、动态响应、防电击保护和电网保护功能等方面。EasyGo提供的基于CPU+FPGA的HIL实时仿真器用于光伏变流器的半实物仿真测试,支持拓扑结构研究、工况测试、电能质量验证和控制算法验证。文中还提到了基于PXIBox 5442的储能变流器实时仿真方案及相关的测试内容,如频率扰动、高/低电压穿越、孤岛预防和电能质量测试等。
|
7月前
|
存储 应用服务中间件 网络安全
Android 网络链接稳定性测试解决方案
Android 网络链接稳定性测试解决方案
158 0
|
7月前
解决方案测试重要吗?
解决方案测试重要吗?