测试用例使咱们的代码质量变得可靠,同时让咱们可以放心地重构或者修改代码,并保证咱们的修改没有破坏其余部分。并且咱们能够在项目开始的第一天就能运行咱们的代码,而不用等到万事俱备。express
XCTest做为咱们的测试框架是由于它很是简单而且与 Xcode的IDE直接集成。框架
每一个XCode建立iOS的工程中都有一个叫作”工程名Tests”的分组,这个分组里就是XCTestCase的子类,XCTest中的测试类都是继承自XCTestCase。 测试
例如新建一个工程,命名为Demo,就能看到如图 spa
#import <UIKit/UIKit.h>#import <XCTest/XCTest.h>@interface DemoTests : XCTestCase@end@implementation DemoTests - (void)setUp { [super setUp]; // Put setup code here. This method is called before the invocation of each test method in the class.} - (void)tearDown { // Put teardown code here. This method is called after the invocation of each test method in the class. [super tearDown]; } - (void)testExample { // This is an example of a functional test case. XCTAssert(YES, @"Pass"); } - (void)testPerformanceExample { // This is an example of a performance test case. [self measureBlock:^{ // Put the code you want to measure the time of here. }]; }@end
四个方法分别是:setUp, tearDown, testExample, testPerformanceExample。点击testExample按钮对单个方法作测试,Command+U 或者implemenation按钮对全部的方法作测试。这个测试用例类没有头文件,由于测试用例不须要给外部暴漏接口。按照苹果官方的文档,创建一个测试用例的过程应该是这样的:code
创建一个XCTestCase的子类orm
实现测试方法继承
选择性的定义一些实例变量来存储fixture的状态接口
经过重写setUp方法选择性的实例化fixtureci
经过重写tearDown方法来在测试后清除文档
测试方法没有参数和返回值,用test做为前缀,好比: - (void)test+name
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没有发生具体异常、具体异常名称的异常时经过测试,反之不经过 特别注意下XCTAssertEqualObjects和XCTAssertEqual。 XCTAssertEqualObjects(a1, a2, format...)的判断条件是[a1 isEqual:a2]是否返回一个YES。 XCTAssertEqual(a1, a2, format...)的判断条件是a1 == a2是否返回一个YES。 对于后者,若是a1和a2都是基本数据类型变量,那么只有a1 == a2才会返回YES