XCTestCase简单介绍和使用

为什么我们需要测试?

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

XCTestCase

   XCTest作为我们的测试框架是因为它非常简单并且与 Xcode的IDE直接集成。

   每个XCode创建iOS的工程中都有一个叫做”工程名Tests”的分组,这个分组里就是XCTestCase的子类,XCTest中的测试类都是继承自XCTestCase。 

   例如新建一个工程,命名为Demo,就能看到如图 

XCTestCase简单介绍和使用_第1张图片

#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按钮对所有的方法做测试。这个测试用例类没有头文件,因为测试用例不需要给外部暴漏接口。按照苹果官方的文档,建立一个测试用例的过程应该是这样的:

  • 建立一个XCTestCase的子类

  • 实现测试方法

  • 选择性的定义一些实例变量来存储fixture的状态

  • 通过重写setUp方法选择性的实例化fixture

  • 通过重写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




你可能感兴趣的:(XCTestCase简单介绍和使用)