2.7.1 简介
iOS和Android类似,也存在这样的情况:
(1)一个项目有废弃的功能,但是只从应用层面屏蔽了对应的入口,代码依然存在;
(2)某此极端的兜里代码,正常情况下无法测试,生成报告时依然会统计进覆盖率报告。
(3)多个需求混合开发,只希望看到本需求的增量报告,当然此种情况后面还有其他优化方案。
还有一些其他的情况,就是项目中有些代码不需要统计到覆盖率报告中,全量报告或是增量报告中却存这类数据,影响问题分析和数据度量,业务同学反馈能否去掉此类数据?
2.7.2 排除指定的类
无论是Object C还是Swift开发的iOS应用,在生成覆盖率报告的时候,都会生成info格式的报告。
1,Object c 通过lcov命令生成info报告数据
lcov -b <测试代码路径> -d <gcda目录位置> -c -o result.info --rc lcov_branch_coverage=1
2, Swift项目生成info文件:
xcrun llvm-cov export ./shoppingCart
--instr-profile=test.profdata -use-color
--format=lcov > ./newreport.info
生成info格式的文件后,里面的数据就是以类为单位,包含各种覆盖率数据。
3,去掉指定类的覆盖率数据
要排除指定的类,就把info文件中包含这个类的所有信息去掉即可,如去掉类:/Users/****/DataHelper/KImPinYin.swift的覆盖率信息,
只需要把以:SF:/Users/****/DataHelper/KImPinYin.swift开始,到第一个end_of_record之间的数据,将其他的类信息保存成新的info文件 newrport.info。
然后再生成报告:
genhtml -o newreport newrport.info
2.7.3 排除高级用法
由于info文件记录了类,函数,分支等具体信息,所以也可以针对具体的类,去掉指定的函数,指定的行的覆盖率数据。
以行为例:DA:XX 代表文件中的第几行,紧跟着的数字代码执行多少次。如果要去掉这个行的覆盖率信息,将执行次数改成0。
如果要去掉函数信息,可以先算出函数的起始位置,将这个范围内的行执行次数都改成0,再把整个类的函数信息减1。其他的信息根据自己的需求进行改写。