对于我的iOS项目,我有设置单元测试和代码覆盖率。 虽然测试成功,并且代码覆盖率统计通常看起来是正确的,但我的ViewControllers覆盖率为0%,即使我已经验证这些测试已经运行。
我的问题是如何确保代码覆盖率中包含这些单元测试。
这是我的设置:
为了验证错误不是由XcodeCoverage引起的,我在测试结果上使用coverstory,覆盖范围相同。我还验证了.gcda和.gcno文件实际上是在测试期间创建的。
单元测试示例:
#import <XCTest/XCTest.h>
#import <OCMock/OCMock.h>
#import "MyViewController.h"
@interface MyTest : XCTestCase
@end
@implementation MyTest
- (void)testViewDidLoad
{
MyViewController *controller = [self getViewController];
[controller viewDidLoad];
XCTAssertTrue([controller.screenName isEqualToString:@"MyScreenName"]);
XCTAssertTrue([controller.navigationItem.title isEqualToString:@"My VC"]);
XCTAssertNotNil(controller.menuButton);
}
- (MyViewController *)getViewController
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil];
MyViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];
return controller;
}
@end
我想我应该注意到,尽管有XcodeCoverage的指南,但我测量的是测试目标上的代码覆盖率而不是主目标(这意味着基本上使用的是gcda和gcno文件,它们出现在
{BuildFolder}/Build/Intermediates/App.build/CodeCoverage-iphonesimulator/TestTarget.build/Objects-normal/i386/
而不是... / MainTarget.build / ...因为我注意到后一个位置只获得在模拟器中启动应用程序时运行的代码的覆盖范围,而另一个覆盖了(大部分)单元测试。我不知道为什么我的设置与建议的不同。
提前致谢。