Xcode 10、启用代码覆盖率的最小努力

Xcode 10, minimum effort to enable code coverage

我有一个大型 Xcode 10 项目用于一个 iOS 应用程序,它有将近 40 个屏幕和相关的视图控制器(都是 Objective-C)。有些代码是十年前的,有些是新的。该项目没有 UI 或单元测试,但我想启用代码覆盖并手动运行该应用程序。有没有一种方法可以添加,比如说,一个允许我手动 运行 整个应用程序并跟踪哪些方法和功能被使用或未被使用的测试?

比我想象的要简单,只是不容易,因为我以前从未做过任何测试。

我做了一个 UI 测试,它保持 运行 直到发生一些我可以触发的可测试事件,例如退出应用程序(将其置于后台)。

运行 此测试和练习应用程序。完成后,按主页。测试将退出,您在 运行 期间所做的任何操作的代码覆盖率将显示在编辑器的代码覆盖率列中。

  1. 为 UI 测试添加一个新目标。
  2. 编辑方案、测试、选项:代码覆盖范围:所有目标。

将此代码添加为 UI 测试:

- (void)testCoverage
{
    // UI tests must launch the application that they test.
    XCUIApplication *app = [[XCUIApplication alloc] init];
    [app launch];

    // Code Coverage is turned on in the Test scheme

    // (a) loop until Home button pushed...
    while ( [app waitForState:XCUIApplicationStateRunningBackground timeout:60] == NO ) {
        // still in the foreground
    };
    // now in background
    // (b) or, sleep(20);
}

必须是 UI 测试。作为单元测试,行 XCUIApplication *app = [[XCUIApplication alloc] init]; 导致异常。