iOS XCTest单元测试

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

创建单元测试的方法

新建项目

在新建立一个项目时直接勾选

新建项目

已有项目

对已有的项目添加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.
基准时间可以认为是你期望代码执行的时间
设置baseline

异步测试

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
在这里插入图片描述
在这里插入图片描述
点击可以进入源码
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值