JAVA方法mock调用工具的实现

[VT虚拟化驱动]利用EPT实现无痕HOOK 本章利用讲EPT无痕HOOK 阅读详情

背景

在生产上线时,可能遇到有一些case不好立即验证;

  • 例如用户必须是xx用户(新用户,流失用户…)才能领到某些活动券,而这样的用户账号不好获取;
  • 例如想让测试用户看到不同的页面效果;

所以希望在调用一些方法接口的时候针对指定入参可以返回指定的返回结果。

这些方法可以是调用上游的dubbo方法,也可以是内部自己的本地方法等。

方案设计

入参出参分析

首先来看方法的参数和返回结果的类型,以及入参和出参组装分类;

入参出参数据类型分类
  • 基本类型或者包装类型:int, double, Integer,String,Boolean…
  • 集合类型:List,Map<K, V>…
  • 复杂类型:xxxRequest,xxxResponse
入参出参组装分类

入参:

  • 无入参

    public int fun();

  • 一个入参(可能是三种类型的其中一种)

    • public int fun(String s);

    • public int fun(List list);

    • public int fun(xxxRequest request);

  • 多个入参(可能是三种类型都有)

    • public int fun(String s, List list, xxxRequest request);

出参:

  • 一个出参(可能是三种类型的其中一种)

    • public Integer fun();

    • public List fun();

    • public xxxResponse fun();

  • 无出参(不考虑)

mock配置方式

针对上面对方法入参和出参的分析,可以确定我们需要实现mock的场景和配置方式。

入参:match配置内容则返回mock结果

  1. 方法没有入参,无需配置对比;

  2. 方法入参类型为基本类型或集合类型(Integer,List);序列化后整体做对比

  3. 方法入参类型为复杂类型(xxxRequest);可选取部分字段对比

    需要注意List也需要序列化后整体做对比

出参:

  1. 想要构造整个出参的结果;

  2. 想要从真实调用中修改结果的某几个字段的值;

    其中有些字段嵌套的比较深,可利用"a.b.c"的配置方式来修改,可参考下文的配置;

mock流程

image.png 从流程上可以看出,为了不影响到接口调用,流程中做了严格的校验处理,一旦报错或者配置信息有误都要真实调用并返回结果。

代码实现

完整代码见github:github.com/XDcherish/j…

1.引入切面与注解

引入切面:

@Bean
public MethodMockAspect methodMockAspect() {
    return new MethodMockAspect();
} 

切面的扫描范围是添加了@MethodMock的类,这样类中的方法在调用过程中会被切面拦截 。

@MethodMock
public class TestMockClass {

    public Boolean testSimpleWithoutInput() {
        System.out.println("真实执行啦:");
        return true;
    }
} 

2.增加mock配置

可参考com.xh.utils.mock.dto.MethodMockDTO中的注释进行配置,各字段有详细解释;

mockRequestDTOsList和mockResponseDTOS 都是List表示支持同一个方法的多组入参和出参匹配。

例如下面的配置:

{
"com.xh.utils.mock.test.TestMockClass#testSimpleWithoutInput": {	//简单无入参的配置
    "openMock": true,	//是否开启配置
    "mockResponseDTOS": [	//只需要配置response即可,虽然是数组,但只能配置一个
     
caverdock如何使用,一文给你多方案教学! 🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。 阅读详情

相关推荐

ADS RFpro 射频阻抗仿真步骤

导入器件后,在库里面选取器件的对应模型,如图所示我们选取10pf 系统自带的村田模型。选取网络上的器件,拖入到下面component Models。导入成功后,截取需要仿真的区域(不截取仿真时间会非常长),可以生成对应如下原理图,通过原理图继续调整仿真。图上找到需要仿真链路上的网络,右键设置为信号。的叠层信息,按照PCB板厂提供信息填写完整。选择仿真的频率范围和频点数,生成如下图的RFPro仿真界。,然后再把GND也添加到下面。按图设置截取需要仿真的部分。添加成功后 网络就有了,15 双击run开始仿真。

m0_72954480的博客 3217

手把手教你用NE555+LM324搭建红外倒车雷达(附Multisim仿真文件)

本文详细介绍了如何使用NE555定时器和LM324运算放大器搭建一个红外倒车雷达系统。内容涵盖从核心原理拆解、模块电路设计(包括红外发射、接收放大、检波与电压比较)到实战焊接调试的全过程,并提供了Multisim仿真验证思路,帮助电子爱好者与初学者将模拟电路理论转化为可工作的实用项目。

echo99的专栏 680

基于STM32的智能火灾报警系统设计:多传感器融合与远程控制实现

本文详细介绍基于STM32单片机的智能火灾报警系统设计,采用多传感器融合技术(烟雾、温度、火焰检测)实现高精度火灾识别。系统集成远程控制与手机APP监控,通过加权决策算法降低误报率,提供多级响应策略,确保火灾预警的准确性与可靠性。

u5v6w7的博客 1104

七自由度机械臂逆运动学实战:从几何简化到KDL库高效求解

本文深入探讨了七自由度机械臂逆运动学求解的实战方法。针对冗余自由度带来的挑战,文章对比了两种核心方案:一是利用任务约束进行几何简化,快速求解特定任务;二是基于DH参数法配置KDL库,实现通用高效的数值迭代求解。文中结合宇树H1机器人实例,详细阐述了从模型解析、参数提取到代码实现与验证的全流程,并提供了几何法与KDL库的适用场景对比与避坑指南。

weixin_29044713的博客 639

显著性算法 + 伪彩变换

利用opencv得到显著图和伪彩图

正在挣扎中的人 2299

AMBA-CHI协议详解(三)

Write Transactions、Atomic transactions、 Stash transactions、 Dataless transactions的等各个事务的事务流。

Crazzy_M的博客 3181

基于FPGA的数字信号处理(17)--定点运算的实现实例(饱和Saturate与四舍五入Round)

基于FPGA的数字信号处理(17)--定点运算的实现实例(饱和Saturate与四舍五入Round)

孤独的单刀 2960

卫朋:IPD流程落地——产品计划阶段拆解

IPD计划阶段拆解

产品线负责人 957

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: 来段java,教你埋坑,劝你善良
下一篇: 巧用策略模式完美应付产品四次需求变更,也吵了四次|2021 年中总结
Python_cola
博客等级 码龄5年 2031粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值