gpt4 book ai didi

objective-c - 无法在 Xcode 4.2 中查看代码覆盖率

转载 作者:搜寻专家 更新时间:2023-10-30 19:48:17 24 4
gpt4 key购买 nike

我正在 Xcode 4.2 中创建一个 iPhone 5.0 项目,并希望在执行单元测试时找到代码覆盖率。我是 Xcode 环境的新手,我已按照提供的步骤进行操作 here .我能够正确修改测试目标的build设置,并正常链接“libprofile_rt.dylib”文件。

此时,当我执行测试(使用 Command-U)时,代码编译并且测试通过。我没有遇到描述的问题here .此外,我已经安装了 CoverStory .

第一个链接中的作者提到了 "Just run your unit tests and view the code coverage data as usual" ;但是,我找不到 .../Objects-normal/i386 .

为了让事情正常进行,我创建了一个包含以下类的新项目:

#import "SomeClass.h"

@implementation SomeClass
@synthesize someValue;

-(void)performWork:(BOOL)now withValue:(int)value {
if (now) {
someValue = value;
}
else {
someValue = value - 1;
}
}

@end

和测试类:

#import "CodeCoverageTests.h"
#import "SomeClass.h"

@implementation CodeCoverageTests

- (void)testExample {
SomeClass *obj = [[SomeClass alloc] init];
[obj performWork:YES withValue:3];
STAssertEquals(obj.someValue, 3, @"Value was not 3");
}
@end

理想情况下,我希望以某种方式收到通知,当测试执行时,else performWork 中的条款方法永远不会被解雇。

因此我有以下问题:

  1. 根本问题是不支持我尝试使用新编译器做的事情吗?
  2. user chown 描述的唯一解决方案吗?回应我上面链接的问题?
  3. 如果我遵循 2) 中的解决方案,我是否能够使用 CoverStory(或类似的东西)?

更新:经过一番努力,我终于找到了“SomeClass.gcno”和“SomeClass.gcda”文件的位置(感谢@bjhomer - 参见this link),他们精美地描绘了ifperformWork中条件语句的一部分被覆盖了(else 没有)。为了确保,我修改了测试如下:

- (void)testExample
{
SomeClass *obj = [[SomeClass alloc] init];
[obj performWork:NO withValue:3];
STAssertEquals(obj.someValue, 2, @"Value was not 2");
}

重新构建并重新执行单元测试后,我重新加载了 .gcno 和 .gcda 文件。 CoverStory 显示覆盖范围更改为 else performWork 的一部分方法。但是有一个小警告:

  1. 我需要修改 <TargetName> 的build设置(不是 <TargetNameTest>,如 here 所示)以便在 ...<TargetName>.build/Objects-normal/i386/ 中创建“SomeClass.gcno”和“SomeClass.gcda”文件目录。

再次感谢您的帮助!

最佳答案

听起来您的主要问题是找不到 Build/Intermediates/<SchemeName>.build/<ConfigurationName>-<PlatformName>/<TargetName>.build/Objects-normal/<ArchitectureName>目录。该目录在构建时总是使用,无论您是否进行代码覆盖。那是存储编译器生成的所有中间文件的地方,也是最终的 .gcno 的地方。和 .gcda如果您正在进行代码覆盖,文件应该存在。如果找不到该目录,问题与覆盖无关,问题在于您需要找到该目录。

回答您的问题。

  1. 从 Xcode 4.2 开始,LLVM 编译器支持代码覆盖率。它不适用于 LLVM-GCC,因此请确保您没有使用它。
  2. 不,没有必要在 Xcode 4.2 中破解以支持 GCC 4.2。我现在正在使用 Xcode 4.2 运行代码覆盖率,但没有执行上述任何操作。
  3. 您应该能够以任何一种方式使用 CoverStory;对 GCC 4.2 的支持不会改变构建产品的去向。

关于objective-c - 无法在 Xcode 4.2 中查看代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8811479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com