美文网首页
iOS 单元测试流程分析和如何异步测试

iOS 单元测试流程分析和如何异步测试

作者: sea_biscute | 来源:发表于2016-12-30 21:11 被阅读411次

测试执行的流程

测试类和方法的执行是按照顺序,one by one同步执行的.
执行测试的默认流程是,XCTest会找到所有的测试类并逐一运行类里的所有测试方法.
当然也可以通过XCode的测试导航控制,只测试某个类或者方法.
对于继承了XCTest的测试类来说,测试会先执行setup方法

  • 对于每个测试方法来说,上个测试方法的实例对象会被销毁,当前都会重新生成一个当前类的实例
  • 每个测试方法都会先执行setup方法,在这之后,才会运行我们的测试方法,测试方法执行完成后,会运行teardown方法

  • 所有测试方法的流程都是如上执行的

  • 当类里面的最后一个测试方法执行完teardown对象方法后,XCode会执行当前的类方法teardown,然后开始测试下一个类

  • 该流程一直持续到所有的测试方法被测试过后.

写测试方法

测试类中,添加测试方法,均为对象方法,且方法名以test开头,无输入参数和返回结果,举例func testColorIsRed()

测试异步操作

测试是同步按顺序one by one执行的,为了处理测试异步操作的情况,XCTest在XCode 6之后提供了串行异步去执行测试方法,会在当前方法等待,直到异步方法执行完成或者超时.

如何测试异步方法,在异步方法完成之后才进行下一步操作呢?需要类XCTestExpectation
创建XCTestExpectation实例,通过方法expectation(description:),一个测试方法里,可以有多个expectations,

创建expectation后,可以通过fullfill标记异步操作的完成,或者通过waitForExpectationsWithTimeout : handler:方法,进行一个超时时间的监听.如果在超时时间过后,exception没有被标记为完成,则测试失败,进入timeout的回调.
下面是例子

// 测试异步操作
// 使用 XCTestCase的异步API监听,直到异步操作完成

- (void)testDocumentOpening

{

    // 创建expectation对象
    // 下面的例子只有一个expectation, 但是在实际开发中,可以创建多个,并且会等待直到全部完成

    XCTestExpectation *documentOpenExpectation = [self expectationWithDescription:@"document open"];

    NSURL *URL = [[NSBundle bundleForClass:[self class]]

    URLForResource:@"TestDocument" withExtension:@"mydoc"];

    UIDocument *doc = [[UIDocument alloc] initWithFileURL:URL];

    [doc openWithCompletionHandler:^(BOOL success) {

        XCTAssert(success);

        // 对结果进行判断,进行处理或者抛出异常
        // 结束当前的expectation,该操作会触发 waitForExpectation 方法
 
       [documentOpenExpectation fulfill];

    }];

    // 测试会暂时停止,直到超时或者expectation被完成

    [self waitForExpectationsWithTimeout:1 handler:^(NSError *error) {

        [doc closeWithCompletionHandler:nil];

    }];

}

巧用断言

断言的作用在于,当测试的结果不满足需求时,通过断言来宣布当前测试失败,一个测试方法中可以有多个断言,只要其中一个失败,及视为测试失败.断言的使用非常简单,系统提供了以下几种类型

  • 无条件失败: XCTFail(format...),该断言会直接宣布测试失败
  • 等式失败: XCTAssertEqualObjects等形式,不一一列举,当等式不满足时,宣布失败
  • 空值测试
    • XCTAssertNil 不为空时失败
    • XCTAssertNotNil 为空时失败
  • 布尔测试
    • XCTAssertTrue(expression, format...)不为ture时失败
    • XCTAssertFalse(expression, format...)不为false时失败

相关文章

  • iOS 单元测试流程分析和如何异步测试

    测试执行的流程 测试类和方法的执行是按照顺序,one by one同步执行的.执行测试的默认流程是,XCTest会...

  • iOS测试框架XCTest

    XCTest已基本满足单元测试和UI测试的需求,支持对同步流程、异步流程、性能的测试,UI测试代码的自动生成,代码...

  • iOS单元测试

    参考博客:iOS单元测试概念了解iOS异步测试Xcode:为你的项目集成单元测试(unit tests)时记得避开...

  • Apex单元测试

    单元测试类 Salesforce中为Apex语言提供了完整的单元测试流程,包括单元测试类、测试的运行和结果分析等。...

  • 第2章 个人技术与流程 笔记&总结

    第2章 个人技术和流程 知识点:单元测试、回归测试、效能分析、个人软件开发流程、开放-关闭原则(OCP) 单元测试...

  • 【笔记】构建之法

    第二章:个人技术和流程 要点: 单元测试,回归测试,效能分析,基于个体的软件开发流程(PSP) 单元测试的构建标准...

  • 《构建之法》整理

    第2章 个人技术和流程 单元测试 单元测试 回归测试 回退操作 效能分析工具 先用抽样的方法找到效能瓶颈所在,然后...

  • iOS开发——单元测试

    iOS开发——单元测试 iOS开发——单元测试

  • 单元测试

    内容 单元测试 参考文章: [iOS单元测试系列]单元测试框架选型 iOS单元测试:Specta + Expect...

  • Android Junit 单元测试、异步测试方法简介及异步测试

    Android Junit 单元测试、异步测试方法简介及异步测试框架指南 本文解决的问题 1. 如何使用junit...

网友评论

      本文标题:iOS 单元测试流程分析和如何异步测试

      本文链接:https://www.haomeiwen.com/subject/lkwmvttx.html