ViewControllers缺少Xcode5.1单元测试代码覆盖率

时间:2014-06-11 14:58:28

标签: ios objective-c xcode unit-testing

对于我的iOS项目,我有设置单元测试和代码覆盖率。 虽然测试成功,并且代码覆盖率统计通常看起来是正确的,但我的ViewControllers覆盖率为0%,即使我已经验证这些测试已经运行。

我的问题是如何确保代码覆盖率中包含这些单元测试。

这是我的设置:

  • Xcode 5.1,使用XCTest单元测试框架和OCMock(通过Cocoapods)。
  • XcodeCoverage用于衡量代码覆盖率。我使用John Reid的guide来实现这个目的。
  • 我在主要目标上使用CMD + U运行单元测试(所有测试类都获得覆盖,ViewControllers除外),并通过单击测试类边缘的小菱形(只有一些辅助类获得一些覆盖)
  • 我在ViewController单元测试上设置了一个断点,以验证这些断点是否正在运行。

为了验证错误不是由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 / ...因为我注意到后一个位置只获得在模拟器中启动应用程序时运行的代码的覆盖范围,而另一个覆盖了(大部分)单元测试。我不知道为什么我的设置与建议的不同。

提前致谢。

0 个答案:

没有答案