一般来说单元测试为对软件中的功能进行测试的,单元测试覆盖程度也间接代表着代码的成熟程度
那么这里就小探一下ios中的单元测试 —- 案例demo
准备工作
正常创建项目的时候,系统会自动帮我笨创建一个Tests结尾和UITests结尾的文件夹,与我们正常的开发项目同级,这就是单元测试的目录文件夹,通过command + u 即可运行编写的单元测试代码
也可以通过点击代码块前面的方块来运行代码块,如下所示,鼠标放那里会有执行按钮出现,点击即可进行代码块测试(后面继续介绍)
Tests结尾的文件夹为正常测试逻辑的文件夹,UITest为编写UI测试代码的文件夹,其下面的类均继承子XCTestCase类,可以在里面编写测试代码
单元测试
测试代码.m文件里面,通过setUp、tearDown、testExample方法来正常测试代码
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, @"逻辑有问题了");
}
复制代码
不满足条件,会报错
满足条件
异步、执行时间测试
通过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,设置满意的代码块执行时间,这样就可以看到结果了
最后
单元测试就小探到这里,可以点击XCTestCase类,查看document文档,查看里面的其他方法来做测试,快点试试吧