创建单元测试的方法
新建项目
在新建立一个项目时直接勾选

已有项目
对已有的项目添加target

添加Test文件
新建test文件

test方法
方法要一定要用test开头

用test开头的方法才能被执行
test的执行顺序
1.setUp:初始化,重置
2.testFunc:测试的方法
3.tearDown:销毁
4.循环1-3

测试断言
测试中最重要的,用来看测试的结果与预期的结果是否相符
int a = [self.vc add:1 andB:2];
// 0.直接失败
XCTFail(@"失败"); // 测试失败
//// 1.bool类型比较
BOOL res = a < 0;
XCTAssert(res,@"失败时的提示"); //a是不是为true
XCTAssertTrue(res,@"失败时的提示");//a是不是为true 不为true失败
XCTAssertFalse(res,@"失败时的提示"); // ((a) is false) failed - 失败时的提示
// 2.判断是不是nil
NSString *strNil = nil;
NSString *strNotNil = @"123";
XCTAssertNil(strNil,@"判断对象是nil");//判断对象是nil
XCTAssertNotNil(strNotNil,@"判断对象不是nil");
// 3.判断是不是相等
XCTAssertEqual(a, 3,@"失败时的提示");//比较两个表达式是不是相等
XCTAssertNotEqual(a, 3,@"失败时的提示");
// XCTAssertEqualObjects(<#expression1#>, <#expression2, ...#>)//两个对象相等
// XCTAssertNotEqualObjects(<#expression1#>, <#expression2, ...#>)//两个对象不相等
XCTAssertEqualWithAccuracy(1, 3, 3,@"误差为3以外");
XCTAssertEqualWithAccuracy(1, 3, 1,@"误差为1以外");
// 大小比较
//
XCTAssertGreaterThanOrEqual(a, 2,@"失败时的提示");//比较a是不是大于2
XCTAssertGreaterThan(a, 3,@"失败时的提示");//((a) greater than (3)) failed: ("3") is not greater than ("3")
XCTAssertLessThan(a, 4,@"不失败就没有提示");//a less than 4
// //异常测试
NSArray *arr = @[@"1"];
NSLog(@"arr : %@",arr[0]);
// NSLog(@"arr2 : %@",arr[2]);
XCTAssertThrows(arr[0],@"arr[0]没有异常");//如果表达式没有异常,抛出一个失败
XCTAssertNoThrow(arr[2],@"arr[2]抛出异常");//如果表达式异常,抛出一个失败
测试的种类
普通测试
- (void)testAdd{
int res = [self.vc add:1 andB:2];
XCTAssertEqual(res, 3,@"add方法出错");
}
性能测试
用来测试某一段代码需要花费的时间,比如图片处理的代码,
startMeasuring 和 stopMeasuring 之间的代码会被执行10次 ,
执行10次的时间被用来计算平均时间
- (void)testSleep2Seconds{
[self measureMetrics:@[XCTPerformanceMetric_WallClockTime] automaticallyStartMeasuring:NO forBlock:^{
for (int i = 0; i < 100; i++) {
};
[self startMeasuring];
[self.vc sleep2Seconds]; // 只测试这一部分
[self stopMeasuring];
}];
}
可以设置Baseline : 基准时间. 以及误差时间 Edit.
基准时间可以认为是你期望代码执行的时间

异步测试
XCTestExpectation : 设置期望的类
fulfill // 相当于开启了wait的监听
-(void)testAsyn{
NSTimeInterval timeOut = 5.0;//设置期望异步执行的时间范围
XCTestExpectation *exc = [self expectationWithDescription:@"描述"];
dispatch_async(dispatch_get_global_queue(0, 0), ^{
//执行2s
[self.vc load:^(id data) {
XCTAssertNotNil(data,@"data 是 nil");
[exc fulfill];//一定要加这一句代码
}];
});
//timeOut 超过2s不失败
//timeOut 少于2s失败,报红色失败
[self waitForExpectationsWithTimeout:timeOut handler:^(NSError * _Nullable error) {
NSLog(@"完成后的一些操作");
}];
}
fulfill // 相当于开启了wait的监听
代码覆盖率
shift + command + / 打开edit scheme


点击可以进入源码

本文深入讲解Swift语言下单元测试的创建方法,包括测试文件的添加、测试方法的编写规范、测试执行顺序及各类断言使用。同时,介绍了普通测试、性能测试与异步测试的区别与实践,以及如何通过代码覆盖率评估测试质量。
801

被折叠的 条评论
为什么被折叠?



