如何提高单元测试效率

29 篇文章 0 订阅
12 篇文章 0 订阅

困扰

对于程序员来说,尤其是做业务代码比较多程序员,往往出现这样的情况:需求开发周期为5个工作日,开发仅占2天,但测试和联调竟然需要3天。为什么会出现这样的情况呢?我总结有以下几点:

1、开发业务代码往往不会有什么技术难度,就是业务逻辑复杂些罢了,而程序员对业务理解并不总是完全到位。

2、单测和联调也需要协调各方面的环境,往往也需要从头开始造数据。

    例如:如果一个大流程有十个步骤,

    1)要开发和测试第十一个的时候,前十个步骤就得先走完(别想用数据库里现成的数据),才能测试第十一个。前十个如果每个都用单测来跑,就恐怖了。

    2)如果要对,第四个,第七个,第九个步骤进行修改和测试呢?是不是更麻烦些。

3、每启动一次单元测试,需要加载各种配置文件,初始化spring容器,建立各种连接。一个单测跑下来,一分钟差不多就过去了,而大部分时间都用来准备环境了,“干正事”的时间不到10%。

4、每次运行单测都需要修改代码,需要从数据库中找数据,然后复制粘贴。

被这些繁琐、易出错的各种步骤整的烦死了,宝贵的时间都浪费在这上面了,一天下来干不了多少活!

现在对各行业各企业各职业,最重要的都是一点:时间!如果能够短时间高效率把事情做好,一定是具有竞争力的。

思考

上面的问题,哪里可以优化一下吗?

1、能不能只初始化一次spring容器,然后一直可以运行呢?

2、能不能给单测方法,传入参数,不用经常修改代码了呢?

3、能不能把所有的单测类和方法都集成到一个列表或容器中呢?

答案是肯定的。

解决方案的原则

    1、最大限度的利用当前的单测方法,对于现存的单测方法,只通过添加注解即可加入包克斯测试。
    2、spring容器的加载和各种连接的建立只初始化一次,与启动tomcat容器达到的效果相同。

    3、单测的类、方法、参数和输出集中管理,统一入口,可以任意多次调用。支持注释标识其功能。

    4、使用maven引入jar包,对现有的业务代码不产生入侵。

实现原理

    1、根据参数boxTest.contextLoaction,加载业务系统配置spring文件,初始化的spring容器。
    2、找到单测所在的路径(test-classpath:默认target/test-classes),自定义类加载器加载所有类。
    3、把加载进来的通过BeanDefinitionRegistryPostProcessor包装成RootBeanDefinition,并注册到容器中。
    4、启动TestItemCollector从spring容器收集所有@BoxTest的类和@BoxMethod方法,缓存起来

    5、调用MethodBox的start方法绘制窗口,把单测类和方法都设置到下拉菜单中 

    6、操作时,选定单测类、方法和填写参数(如果需要)之后,点击执行会使用反射调用相应类的方法。此时控制台的输出会被劫持到窗口的输出文本域中,做到”一站式服务“。

提问

    1、junit单测方法是不可以传参的,如果给方法写上了参数,用作包克斯测试(@BoxTest),是否还能继续用单测(@Test)呢?

    答:不能用,想兼容可以写个重载方法,传进去就是了,反正每次单测总是要改代码的。

    2、包克斯测试,可以节省多少时间?

    答:包克斯测试最好都用原来的单测方法,这样就不要重复的写了。用熟了可以节省80%以上的时间

 学到了什么?

1、spring可以自己定义类加载,BeanDefinitionRegistryPostProcessor就是干这个的

2、使用maven编译,target/classes是classpath,target/test-classes是test-classpath,后者可以引用前者的类,反过来不行。

3、一切问题总有变通的方案,就看看咱们愿不愿意花时间和精力了。

后期改进方向

1、支持SpringBoot 自动化配置

2、更改启动方式,用更合理的方式启动Boostrap类

3、界面操作功能优化,提高操作效率,减少误操作

备注:本文根据前面的博文改造而来,改进之处为可配置化更强,可移植性更好。

见:https://blog.csdn.net/salerzhang/article/details/80079300

包克斯测试,代码见:https://code.aliyun.com/xinfei0804/boxTest.git

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值