《高性能iOS应用开发》测试及发布

2018-03-14  本文已影响25人  Yasic

测试类型

定义

单元测试

Xcode 内置 XCTest 作为单元测试框架。

设置 XCTest

File -> New -> Target -> iOS Unit Testing Bundle

编写单元测试

XCTest 的一个测试夹具类必须继承自 XCTestCase,这个类大致包括以下方法

一个简单的单元测试

- (void)testExample {
    XCTAssertTrue(1 < 2);
}

- (void)testFailExample {
    XCTAssertTrue(1 < 2);
}

一个异步的单元测试

- (void)testAsyncTask{
    XCTestExpectation *expectation = [self expectationWithDescription:@"Test Async Task"];
    
    dispatch_async(dispatch_get_main_queue(), ^{
        XCTAssertTrue(1 < 2);
        [expectation fulfill];
    });
    
    [self waitForExpectationsWithTimeout:1 handler:^(NSError * _Nullable error) {
        NSLog(@"waitForExpectationsWithTimeout 超时!超时!超时!");
    }];
}

这里要注意,waitForExpectationsWithTimeout 方法用于在指定时间后检测测试用例结果,fulfill 表明测试用例已经结束,如果 waitForExpectationsWithTimeout 检测时测试用例没有结束则会调用 handler 中的闭包。

一个性能单元测试

- (void)testPerformanceExample {
    [self measureBlock:^{
        for(NSInteger i = 1; i < 1000; i++) {
            for (NSInteger j = 1; j < i; j++) {
                NSInteger k = j * i;
            }
            XCTAssertTrue(1 < 2);
        }
    }];
}

它会对闭包中的方法进行十次运行并统计运行时间的平均值和标准差。

模拟依赖

单元测试关注主要测试对象的功能和行为,对于涉及到的其他次要对象尤其是依赖关系的对象,仅仅关注其交互以及返回的结果和发生的异常,因此需要模拟一些依赖关系。

测试替身 Test Double

测试及组件设计

测试和测试框架都可能影响到组件的设计,解决方案有

持续集成与自动化

迭代开发流程图

一个典型的开发迭代过程,涉及开发人员编写代码,然后提交到一个 VCS,触发构建管道,进行所有测试,代码分析,构建出二进制包用于手动测试,然后进行签名发布。

最佳实践

上一篇 下一篇

猜你喜欢

热点阅读