准备工作
新建项目时可以直接勾选 Include Tests
对已有项目新增单元测试,可以直接新建用于测试的Target
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没有发生具体异常、具体异常名称的异常时通过测试,反之不通过