• Xcode5 统计单元测试覆盖率(仅限XCTest)


    概要

    通过本篇文章,你将学会如何在Xcode5下使用统计XCTest测试代码的覆盖率,以及如何快速得到测试覆盖率的图形化报表。

    为什么要特别说明Xcode5下的代码覆盖率统计,原因是,以前的方法在新环境下,结果不那么令人满意了:

    Code coverage doesn't work well with iOS 7 because iOS 7 does not call any code at the "end" of an app. iOS7 does not:

    1. allow you to register functions with atexit
    2. run any functions marked with the attribute((destructor))
    3. run any C++ destructors for global objects

    (以上英文摘自CoverStory的wiki:https://code.google.com/p/coverstory/wiki/UsingCoverstory)

    如何解决

    Xcode5 里面单元测试覆盖率统计用的还是gcov,显示统计结果用的是lcov,单元测试框架用的XCTest(Xcode5新加的)。

    步骤1:在工程的(应用目标和测试目标都设置)Build Settings中设置:


    设置Debug模式即可。

    步骤2:

    把需要被测试的类同时添加到测试Target:


    关于这一步在网上找了一圈,存在一些争议,有一说是应用代码不要添加到到测试目标,但是我试验的时候,不添加到测试目标,运行单元测试的时候,没有.gcda文件生成,.gcon文件覆盖率全是0。最后还是添加到了测试目标,才统计出单元测试代码的覆盖率。

    步骤3:

    下载gcov IOS7下辅助刷新的类库:XCode5gcovPatch

    这个类库帮助弥补IOS7 下gcov刷新的问题(问题原因,见文章开始处的英文)。

    地址:https://github.com/leroymattingly/XCode5gcovPatch

    下载下来之后解压缩,将这两个类别添加到工程:

    UIApplication+GCovFlush.h仅添加到应用目标

    XCTest+GCovFlush 仅添加到测试目标

    步骤4:

    下载覆盖率工具:XcodeCoverage

    这个工具帮助快速产生图形化报表。

    下载完成解压缩之后放到项目.xcodeproj文件所在的文件夹内(和.xcodeproj文件平级)


    然后下载lcov(下载地址:http://ltp.sourceforge.net/coverage/lcov.php)解压缩之后放到XcodeCoverage内。

    测试Target下添加Build Phases:RunScript (XcodeCoverage说明是要添加到应用目标,但是我试过,不工作,无法统计到代码覆盖率,改到测试Target工作正常)

    Script代码:

    1. <span style="white-space:pre">  </span>XcodeCoverage/exportenv.sh  

    步骤5:clean工程并运行你的单元测试

    步骤6.命令行下CD 到XcodeCoverage目录下 运行./getcov

    经测试,目前仅在模拟器下能看到,真机下不会生产.gcda文件,无法产生覆盖率报表,在进一步调研中。

    就会看到代码覆盖率统计页面:

    代码有修改要重新运行单元测试,先CD 到XcodeCoverage目录 运行./cleancov 运行完单元测试./getcov即可获得覆盖率报表。

  • 相关阅读:
    二分查找(通过相对位置判断区间位置)--17--二分--LeetCode33搜索旋转排序数组
    归并排序(归并排序求逆序对数)--16--归并排序--Leetcode面试题51.数组中的逆序对
    22-Java-Hibernate框架(二)
    21-Java-Hibernate框架(一)
    操作系统-5-进程管理(二)
    操作系统-4-进程管理(一)
    操作系统-3-操作系统引论
    操作系统-2-存储管理之LRU页面置换算法(LeetCode146)
    20-Java-正则表达式
    19-Java-核心类库2-包装类、Integer类、String类、StringBuffer类、StringBuilder类
  • 原文地址:https://www.cnblogs.com/zsw-1993/p/4879460.html
Copyright © 2020-2023  润新知