如何提高j2ee项目的单测覆盖率

目前觉得j2ee项目单测覆盖率不高的原因主要有以下几个:

1. 大家开发时间紧张,写完就联调,联调完就提测,没有时间做单测;

2. 大量代码放在action中,和前端输入耦合在一起,不方便单测;

3. 和外部接口紧密耦合,外部接口不稳定,或者数据不可预知,无法进行单测;

4. 有些方法逻辑复杂,想要run起来需要复杂的环境搭配,代价太大,让人望而却步,也就不单测了。

借鉴一下同事的经验,结合自己的想法,总结如下:

1. 针对第一个问题,实在没有好的办法,在各方面的压力下,难以坚守自己的原则;

2. 第二个问题可以解决,把action拆开,每个action执行一个独立的逻辑。每个action专注于和user进行交互,数据放入model中,业务逻辑放入service中,一些工具方法放入静态类中。每个方法目的单一,易于复用,也易于单测;

3. 第三个问题可以用mock来解决。Mock有两种方式,用自己的实现替换原有的实现,保持接口不变。用mockito,给接口一个临时的实现。不管用那种方式可以保证单测不受外界的影响。但是mock做不了复杂的事情,所有和外界接口的地方最好集中起来,不要四处分散,导致mock的成本很高;

4. 复杂的方法是单测的大忌。复杂方法的特点是输入很多,输出很多,调用的方法很多,逻辑分支很多。很难用一个简单的测试进行覆盖。因此对付它唯一的办法就是break down,一个原则是if的嵌套不超过3层,参数不超过5个,总行数不超过50行。当然这只是参考,不是绝对的。

原文地址:https://www.cnblogs.com/alphablox/p/2806519.html