ios单元测试小探

一般来说单元测试为对软件中的功能进行测试的,单元测试覆盖程度也间接代表着代码的成熟程度

那么这里就小探一下ios中的单元测试 —- 案例demo

准备工作

正常创建项目的时候,系统会自动帮我笨创建一个Tests结尾和UITests结尾的文件夹,与我们正常的开发项目同级,这就是单元测试的目录文件夹,通过command + u 即可运行编写的单元测试代码

image.png

也可以通过点击代码块前面的方块来运行代码块,如下所示,鼠标放那里会有执行按钮出现,点击即可进行代码块测试(后面继续介绍)

image.png

Tests结尾的文件夹为正常测试逻辑的文件夹,UITest为编写UI测试代码的文件夹,其下面的类均继承子XCTestCase类,可以在里面编写测试代码

单元测试

测试代码.m文件里面,通过setUp、tearDown、testExample方法来正常测试代码

image.png

setUp用于初始化工作,tearDown用于销毁案例,testExample测试内容,testPerformanceExample用于性能测试

逻辑测试

下面是一段逻辑测试的代码,XCTAssertEqual检测执行结果是否和指定结果一样,否则会报错

//逻辑测试
- (void)test1 {
    NSInteger a = 10, b = 20;
    NSInteger r = [Store plus:a with:b];
    //XCTAssertEqual(r, 30, @"逻辑没问题");
    XCTAssertEqual(r, 20, @"逻辑有问题了");
}
复制代码

不满足条件,会报错

image.png

满足条件

image.png

异步、执行时间测试

通过expectationWithDescription可以更新超时提示文字,当进行异步测试的时候需要通过waitForExpectationsWithTimeout方法开启超时时间监控,timeout字段为最大时间限制(系统会允许轻微的时间误差)

当异步逻辑执行完毕后,需要调用XCTestExpectation的fulfill方法来填充时间,以用来标记完成时间,否则一定会超时

    XCTestExpectation *ec = [self expectationWithDescription:@"不满足时间要求"];
    [Store loadData:^(id data){
        XCTAssertNotNil(data); //检查数据是否为空
        
        [ec fulfill];//时间填充
    }];
    //超时时间,超过这个时间就失败,系统会有一定的误差范围
    [self waitForExpectationsWithTimeout:2 handler:^(NSError * _Nullable error) {
        NSLog(@"%@", error);
    }];
}
复制代码

性能测试

性能测试不得不提到之前说的testPerformanceExample方法,其里面会有一个代码块,代码块在执行的时候会执行多次取平均值,以测试性能

//性能测试,只有相对性,这里面开启异步多次测试取平均值
- (void)testPerformanceExample {
    // This is an example of a performance test case.
    //可以点击下面一行左边的进行设置能接收的执行时间平均值
    [self measureBlock:^{
        // Put the code you want to measure the time of here.
        //测试性能代码可以放到这里面
        [Store loop];
    }];
}
复制代码

在代码执行完毕后,measureBlock前面会出现一个暗的对勾,点击后,可以点击Edit,设置满意的代码块执行时间,这样就可以看到结果了

image.png

最后

单元测试就小探到这里,可以点击XCTestCase类,查看document文档,查看里面的其他方法来做测试,快点试试吧

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享