1、  在遭遇除零异常时,emma既有实现并不能够精确的处理覆盖率:

emma的几个不足之处_不足

(emma产生的结果)

合理的覆盖率展示应该是:

 

emma的几个不足之处_emma_02

(理想的结果)

2、  如果在构造函数中,或者在被调用的函数中抛出了异常(此处Test3的构造函数会抛出异常),emma既有实现并不能够精确的处理覆盖率:

 

emma的几个不足之处_emma_03

(emma产生的结果)

合理的覆盖率展示应该是:

emma的几个不足之处_emma_04

(理想的结果)

3、emma是把覆盖率信息记录到em和ec文件,而且合并时是叠加的。如果某次进程异常或者被强杀,或者出现意外(譬如掉电等),就可能导致em和ec文件被损坏。这会导致后续的覆盖率合并发生异常,无法产生合并后的覆盖率报表。这个缺陷一直没有改,因为还没有痛到必须改的地步。不过,这的确是emma的一个缺陷。当然,解决办法也是有的,譬如,对em和ec文件的正确性进行检查,不过,程序的复杂度显然也是会上升的。emma对这种高级需求,就不再过问了。更理想的实现方式是,每次覆盖率数据都直接传送给数据库以事务方式保存,要么保存成功,要么保存失败。不过,这个方案就稍微有点笨重,不适合小工程的轻量级的持续集成。