单元测试

121 阅读2分钟

准备工作

新建项目时可以直接勾选 Include Tests

对已有项目新增单元测试,可以直接新建用于测试的Target

WX20210323-020018@2x.png

XCTest框架

XCTest 与IDE 紧密结合,使用起来也非常简单易用

配置方法

//只调用一次
+ (void)setUp {
    
}

+ (void)tearDown {
  
}

//每个测试用例执行前后都要调用
- (void)setUp {
    
    //初始化方法
}

- (void)tearDown {
  
  //测试方法之后调用,为避免影响后续测试用例,可以对相关对象进行销毁
}

所有的测试用例方法都以test开始

  • 功能测试
- (void)testExample {
    
    //功能测试用例
    //可以使用XCTAssert和相关函数验证测试产生正确的结果
}

  • 异步测试
- (void)testAsy{
   
    // give
    XCTestExpectation *ec = [self expectationWithDescription:@"你是好人"];
    
    // when
    [self.vc loadData:^(id data) {
        // give
        // when - 逻辑
        XCTAssertNotNil(data);
        [ec fulfill];
    }];
    
    // then
    //5秒内执行这个方法就不报错
    //5秒内ec 没有fulfill 就报错
    [self waitForExpectationsWithTimeout:5 handler:^(NSError * _Nullable error) {
        NSLog(@"error = %@",error);
    }];
    
}
  • 性能测试
- (void)testPerformanceExample1{
    
    [self measureMetrics:@[XCTPerformanceMetric_WallClockTime] automaticallyStartMeasuring:NO forBlock:^{
        [self.vc openCamera];//提供条件
        
        [self startMeasuring];
        [self.vc openCamera];//局部测试
        [self stopMeasuring];
    }];
}

- (void)testPerformanceExample2{
    
    //性能测试 
    [self measureBlock:^{
        //block 内代码调用10次


    }];
}


断言测试

XCTFail(format…) 生成一个失败的测试;

XCTAssertNil(a1, format...)为空判断,a1为空时通过,反之不通过;

XCTAssertNotNil(a1, format…)不为空判断,a1不为空时通过,反之不通过;

XCTAssert(expression, format...)当expression求值为TRUE时通过;

XCTAssertTrue(expression, format...)当expression求值为TRUE时通过;

XCTAssertFalse(expression, format...)当expression求值为False时通过;

XCTAssertEqualObjects(a1, a2, format...)判断相等,[a1 isEqual:a2]值为TRUE时通过,其中一个不为空时,不通过;

XCTAssertNotEqualObjects(a1, a2, format...)判断不等,[a1 isEqual:a2]值为False时通过,

XCTAssertEqual(a1, a2, format...)判断相等(当a1和a2是 C语言标量、结构体或联合体时使用,实际测试发现NSString也可以);

XCTAssertNotEqual(a1, a2, format...)判断不等(当a1和a2是 C语言标量、结构体或联合体时使用);

XCTAssertEqualWithAccuracy(a1, a2, accuracy, format...)判断相等,(double或float类型)提供一个误差范围,当在误差范围(+/-accuracy)以内相等时通过测试;

XCTAssertNotEqualWithAccuracy(a1, a2, accuracy, format...) 判断不等,(double或float类型)提供一个误差范围,当在误差范围以内不等时通过测试;

XCTAssertThrows(expression, format...)异常测试,当expression发生异常时通过;反之不通过;(很变态)

XCTAssertThrowsSpecific(expression, specificException, format...) 异常测试,当expression发生specificException异常时通过;反之发生其他异常或不发生异常均不通过;

XCTAssertThrowsSpecificNamed(expression, specificException, exception_name, format...)异常测试,当expression发生具体异常、具体异常名称的异常时通过测试,反之不通过;

XCTAssertNoThrow(expression, format…)异常测试,当expression没有发生异常时通过测试;

XCTAssertNoThrowSpecific(expression, specificException, format...)异常测试,当expression没有发生具体异常、具体异常名称的异常时通过测试,反之不通过;

XCTAssertNoThrowSpecificNamed(expression, specificException, exception_name, format...)异常测试,当expression没有发生具体异常、具体异常名称的异常时通过测试,反之不通过