iOS单元测试
前言
- 单元测试使用XCTest框架
- 单元测试的目标:模型文件
- 用处:不基于界面UI的情况下,保证模型类的逻辑正确
创建单元测试
- File——New——Target——iOS Unit Testing Bundle
-
也可以如下图操作
默认方法
- 测试用例文件名约定:以测试类名起始,添加Tests结尾, 如PersonTests.m
- 类中以test开头的方法且void返回类型的方法都会变成单元测试用例,如下
- (void)testAge
{
// 在单元测试中一定要有边界测试
Person *p = [[Person alloc] init];
p.age = 17;
XCTAssertTrue(p.age >= 18, @"年龄应该大于或等于18岁");
p.age = 61;
XCTAssertTrue(p.age <= 60, @"年龄应该小于或等于60岁");
}
- 默认方法
// 每次测试前调用,可以在测试之前创建在test case方法中需要用到的一些对象等
- (void)setUp
// 每次测试结束时调用
- (void)tearDown
//性能测试方法,通过测试block中方法执行的时间,比对设定的标准值和偏差觉得是否可以通过测试
[self measureBlock:^{
// Put the code you want to measure the time of here.
for (int i = 0; i < 1000; i++) {
NSLog(@"时间");
}
}];
断言
XCTAssert(expression, format...)
//Bool测试:
XCTAssertTrue(expression, format...)
XCTAssertFalse(expression, format...)
//相等测试
XCTAssertEqual(expression1, expression2, format...)
XCTAssertNotEqual(expression1, expression2, format...)
//double float 对比数据测试使用
XCTAssertEqualWithAccuracy(expression1, expression2, accuracy, format...)
XCTAssertNotEqualWithAccuracy(expression1, expression2, accuracy, format...)
//Nil测试,XCTAssert[Not]Nil断言判断给定的表达式值是否为nil
XCTAssertNil(expression, format...)
XCTAssertNotNil(expression, format...)
//失败断言
XCTFail(format...)
期望
- 需要在一定时间之后再进行判断的测试例,可以使用 expectationForPredicate 来对未来的状态作出假设并测试在规定的超时时间内是否得到理想的结果
[self expectationForPredicate: 谓词 evaluatedWithObject:被测试对象 handler:nil];
// 设置期望的时间
[self waitForExpectationsWithTimeout:超时时间 handler: nil];