Xcode中统计代码覆盖率

作者: 树下老男孩 | 来源:发表于2015-06-11 19:27 被阅读3380次

    最近在项目里需要在单元测试时统计一下代码覆盖率,其实就是被用来作为测量单元测试的指标,看看测试的代码覆盖到多广的范围,下面介绍一下如何统计单元测试的代码覆盖率:

    下载工具

    主要采用XcodeCoverage工具,它可以将代码覆盖的结果以html的形式展现,方便我们查看,可以采用pod的方式安装:

    pod 'XcodeCoverage', '~>1.0'
    

    工程配置

    pod安装后需要配置工程:

    • 设置 Build Settings
      需要设置两个地方,找到 “Generate Test Coverage Files”和“Instrument Program Flow”两个选项,分别设置Debug下为YES:
    屏幕快照 2015-06-11 下午5.47.01.png
    • 设置 Build Phases
      点击New Run Script Phase,编辑使其运行Pods/XcodeCoverage/exportenv.sh脚本:
    添加运行脚本

    RUN

    工程配置完后,开始跑单元测试例。跑完测试例后,打开终端,cd进入到XcodeCoverage目录,运行如下脚本:

    ./getcov --show
    

    然后你就可以在浏览器中查看你的代码覆盖率结果。

    example

    下面假设你要测试一个getMaxNumber功能,代码如下:

    @implementation MaxNumber
    
    +(int)getMaxNumber:(int)a b:(int)b c:(int)c
    {
        if(a > b){
            if(a > c){
                return a;
            }else{
                return c;
            }
        }else{
            if(b > c){
                return b;
            }else{
                return c;
            }
        }
    }
    
    @end
    

    首先添加一个单元测试:

    -(void)testGetMax
    {
        XCTAssertEqual(3, [MaxNumber getMaxNumber:1 b:2 c:3]);
    }
    

    运行完该测试例后,运行脚本./getcov --show,便可以看到如下结果:


    不完全覆盖

    其中的红色表示测试例没有覆盖到的地方。下面增加三个测试例

    -(void)testGetMax
    {
        XCTAssertEqual(3, [MaxNumber getMaxNumber:1 b:2 c:3]);
        XCTAssertEqual(3, [MaxNumber getMaxNumber:2 b:1 c:3]);
        XCTAssertEqual(3, [MaxNumber getMaxNumber:3 b:2 c:1]);
        XCTAssertEqual(3, [MaxNumber getMaxNumber:1 b:3 c:2]);
    }
       
    

    测试例修改之后,需要先运行cleancov脚本(如果工程里面的代码修改了,需要clean product),然后再运行脚本./getcov --show查看结果:


    完全覆盖

    可以看出现在的测试代码已经覆盖到了该函数的所有代码。

    相关文章

      网友评论

      • 三界之外:请问你知道怎么统计某一个 pods project 的代码覆盖率吗?比如 SDWebImage。
      • 随行的羊:希望关注 “iOS开发知识小集” 的专题哈,谢谢:smile:
      • 困惑困惑困惑:为啥生成的测试覆盖率会有两种结果,相差很大,几乎是二倍
      • 1seven:你好.我试了下,./getcov --show没有生成测试报告,请问是什么原因啊
        IT小书童:支持真机上测试生成覆盖率报告吗?
        1seven:@特务兔爱吃ong菜 解决了
        abcdeuck:在xcode8上,我也没有生成报告,出错了,说找不到什么.da文件,想请问下,你这个问题解决了嘛?
      • 树下老男孩:@Lucifer1988 还没用7。哈哈
      • Lucifer1988:Xcode7是不自带了?
      • 叶舞清风:很有用的信息技术

      本文标题:Xcode中统计代码覆盖率

      本文链接:https://www.haomeiwen.com/subject/znejqttx.html