iOS 单元测试--异步测试

作者: 爱自由鹏 | 来源:发表于2016-05-28 17:15 被阅读1802次

单元测试分为3种:

  • 逻辑测试:测试逻辑方法
  • 异步测试:测试耗时方法(用来测试包含多线程的方法)
  • 性能测试:测试某一方法运行所消耗的时间

本节在 iOS 单元测试--逻辑测试 这篇文章的基础上,来介绍异步测试。直接在已创建好的Person这个类里,增加一个模拟“异步加载个人数据”的网络请求数据方法:

+ (void)loadPersonAsync:(void(^)(Person *person))completion; //异步加载个人数据

异步加载个人数据方法的单元测试.png

Person.m文件:

/** 异步加载个人记录 */
+ (void)loadPersonAsync:(void (^)(Person *))completion {
    
    // 异步 子线程执行
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        
        // 模拟网络延迟 2s
        [NSThread sleepForTimeInterval:2.0];
        
        Person *person = [Person personWithDict:@{@"name":@"zhang", @"age":@25}];
        
        // 回到主线程
        dispatch_async(dispatch_get_main_queue(), ^{
            if (completion != nil) {
                completion(person);
            }
        });
    });
}

然后,切换到PersonTests.m,新建一个 - (void)testLoadPersonAsync{} 异步测试方法,然后Command+S保存,左边会出现菱形白色调试按钮。
测试中,要用到系统提供的XCTestExpectation这个类,以及- (void)waitForExpectationsWithTimeout:(NSTimeInterval)timeout handler:(nullable XCWaitCompletionHandler)handler这个方法来测试,测试代码如下所示:

调试的PersonTests.m文件:

// 测试异步加载person
- (void)testLoadPersonAsync {
    
    XCTestExpectation *expectation = [self expectationWithDescription:@"异步加载 Person"];
    
    [Person loadPersonAsync:^(Person *person) {
//        NSLog(@"%@",person);
        
        XCTAssertNotNil(person.name, @"名字不能为空");
        XCTAssert(person.age > 0, @"年龄不正确");
        
        // 标注预期达成
        [expectation fulfill];
    }];
    
    // 等待 5s 期望预期达成
    [self waitForExpectationsWithTimeout:5 handler:nil];
}

最后,通过AFNetworking的单元测试可以看出,它就是这样来进行异步测试的,附一张截图,大家可以把AFNetworking下载下来,自己研究一下。

AFNetworking的单元测试.png

相关文章

  • iOS单元测试

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

  • iOS开发——单元测试

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

  • 单元测试

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

  • 【开发技巧】单元测试

    iOS XCTest单元测试 iOS开发:XCTest单元测试(附上一个单例的测试代码) [iOS单元测试系列]单...

  • 2019-08-28

    浅谈iOS单元测试 iOS单元测试从入门到应用 - 简书

  • 关于iOS单元测试几点Tips

    相关文章: 1、走出 iOS 单元测试的困境2、iOS单元测试--百度Hi iOS团队技术周报 一、单元测试有什么...

  • 浅谈iOS单元测试

    浅谈iOS单元测试

  • iOS 单元测试--异步测试

    1、如果是后面添加的UnitTest的话需要按照下面的方法进行设置 1.复制Target(App) - Build...

  • iOS 单元测试--异步测试

    单元测试分为3种: 逻辑测试:测试逻辑方法 异步测试:测试耗时方法(用来测试包含多线程的方法) 性能测试:测试某一...

  • iOS单元测试常用的宏和测试方法

    单元测试常用的宏和测试方法 异步测试方法(定时器测试)

网友评论

本文标题:iOS 单元测试--异步测试

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