XCTestCase简单介绍和使用

为何咱们须要测试?

    测试用例使咱们的代码质量变得可靠,同时让咱们可以放心地重构或者修改代码,并保证咱们的修改没有破坏其余部分。并且咱们能够在项目开始的第一天就能运行咱们的代码,而不用等到万事俱备。express

XCTestCase

   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
相关文章
相关标签/搜索