gpt4 book ai didi

objective-c - Xcode 代码覆盖率(来自 CI 构建的命令行)

转载 作者:太空狗 更新时间:2023-10-30 03:19:04 29 4
gpt4 key购买 nike

如何使用 Xcode 5 和 iOS7 生成代码覆盖率?

在升级之前,我的代码覆盖率很好。现在我看不到正在生成任何 *.gcda 文件。

我使用的命令行是:

xcodebuild -workspace ${module.name}.xcworkspace test -scheme ${module.name} -destination OS=${module.sdk.version},name=iPad -configuration Debug

使用 AppCode

  • 当我通过 AppCode 执行测试时,我可以看到在 ~/Library/Caches/appCode20/DerivedData 中生成了 *.gcda 文件。 . .我需要它来为我的持续集成构建工作。

在 Xcode IDE 中工作

  • 也适用于 Xcode IDE。 . .是否有一个 cmd 行会产生覆盖率,或者这是一个 Xcode 错误?

最佳答案

以下是对 SenTestKit 的修复 - 只需将此类添加到您的测试目标即可。 XCTest

应该可以做类似的事情
@interface VATestObserver : SenTestLog

@end

static id mainSuite = nil;

@implementation VATestObserver

+ (void)initialize {
[[NSUserDefaults standardUserDefaults] setValue:@"VATestObserver" forKey:SenTestObserverClassKey];

[super initialize];
}

+ (void)testSuiteDidStart:(NSNotification*)notification {
[super testSuiteDidStart:notification];

SenTestSuiteRun* suite = notification.object;

if (mainSuite == nil) {
mainSuite = suite;
}
}

+ (void)testSuiteDidStop:(NSNotification*)notification {
[super testSuiteDidStop:notification];

SenTestSuiteRun* suite = notification.object;

if (mainSuite == suite) {
UIApplication* application = [UIApplication sharedApplication];
[application.delegate applicationWillTerminate:application];
}
}

并添加

extern void __gcov_flush(void);

- (void)applicationWillTerminate:(UIApplication*)application {
__gcov_flush();
}

为什么会这样?

测试和被测试的应用程序是分开编译的。测试实际上被注入(inject)到正在运行的应用程序中,因此 __gcov_flush() 必须在应用程序内部而不是在测试内部调用。

观察者的小魔法只能让我们检查测试何时结束,并触发 __gcov_flush() 在应用程序内部调用。

关于objective-c - Xcode 代码覆盖率(来自 CI 构建的命令行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18394655/

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