基于javaagent实现的mock框架

背景

项目有点规模,使用dubbo框架,类似微服务的方式将项目分成了多个模块。各个模块逻辑复杂,而且调用了大量的外部接口。开发时自测面临以下问题:

  • 测试某个模块时,需要启动各个上游模块,以及上游模块的上游模块。
  • 业务逻辑复杂,需要有完备的测试数据,才能成功调用各个接口。
  • 项目中的加解密功能设计的不好,难以绕过加解密签名验签通过传入准备好的明文直接进行调用。
  • 有时候,不仅仅需要对外部接口进行mock,还需要mock静态方法、final方法。
  • 各种单元测试框架、集成测试框架都难以满足需求。

目标

  • 可以做到mock项目中几乎所有的方法,包括静态方法、final方法。
  • mock代码采用外挂式,完全不用修改项目中的任何代码或者配置,不用担心mock代码不小心上到生产环境。
  • mock代码,使用熟悉的java语言。
  • mock代码,可以热加载,修改mock代码,不用重启服务。
  • 可以用于单元测试、接口测试、集成测试。
  • 可以用于在联调的时候用于代码热修复。
  • 可以很方便的解决项目中复杂的加解密签名验签。
  • 主要目标是提供给开发同学使用,当然也可以给测试同学用。

方案

  • 方案一
    之前想过一种方案,通过spring的aop实现。切面拦截所有的spring管理的bean方法,然后调用js代码(java内置了nashorn,里面可以调用java代码)。但是功能不够强大,非spring管理的对象的方法,不能mock。非public方法不能mock。对象方法自身相互调用,被调用的方法不能被mock。需要添加一些spring配置,需要在项目中引入mock的jar包。对于远程dubbo服务,如果没有注册到zookeeper,也无法mock。即使有以上诸多限制,用起来还是有明显的作用的。后来又发展了调用groovy
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值