我有几个单元测试的项目,我想测量覆盖率。因此,我按照How-to for CoverStory和网络其他地方的详细说明进行操作。
我将-fprofile-arcs
和-ftest-coverage
添加到我的测试目标和正在测试的目标中,并按指定链接到/Developer/usr/lib/libprofile_rt.dylib
。
它有效!当我在iPhone模拟器下运行测试方案时,我得到了我的代码覆盖率,我的测试和应用程序构建和运行。
但是,当我回到实际iPhone硬件上的Run方案时,我发现了libprofile_rt.dylib的链接错误。具体来说,我得到
ld:找不到-lprofile_rt的库
我怀疑这里的libprofile_rt实际上是一个用于Mac硬件的库,iPhone通常无法链接到为Mac构建的二进制文件。
我的问题是如何在iPhone硬件上运行和获取我的代码覆盖率?
我怀疑我可以使用仅用于测试的Debug目标副本来执行此操作,但这还有另外一个维护目标的麻烦。有没有其他方法让这个工作?我在做些傻事吗?
答案 0 :(得分:2)
可能会有点晚,但实际上你可以。它在this presentation,幻灯片32到34中进行了解释。
花了我相当多的时间来寻找这个隐藏的宝石。希望这可能有助于此页面的未来访问者。
答案 1 :(得分:0)
此问题的可能答案如下:https://stackoverflow.com/a/5140459
诀窍是通过Xcode组织器将* .gcda文件从App的Documents目录中取出,因为它们当然会在设备上生成。
答案 2 :(得分:0)
答案是:您无法在设备上运行并同时获得保险。获得保险的唯一方法是在模拟器上:制作调试目标的副本,设置覆盖范围以及该目标上没有的内容,并在模拟器中使用您的测试运行该目标。
我在stackoverflow上回答了这个问题的所有细节:Code coverage on iOS Using Xcode 4.2 on Lion