iOS开发之单元测试/Unit Tests

来源:互联网 发布:淘宝毕业论文降重 编辑:程序博客网 时间:2024/04/25 08:24

单元测试试通过代码监测代码的开发手段,一般用于敏捷开发和驱动测试开发(驱动测试开发是红灯<有错> / 绿灯<无措>式的迭代开发),单元测试主要针对业务逻辑代码进行测试,不适合做UI的测试.MVVM模式设计的代码,把几乎所有的重要业务逻辑封装在了视图模型里面,这时候单元测试也能很方便的进行检测.


我们在创建一个项目的时候,会看到如下界面:

这里写图片描述

include Unit Tests默认是勾选的,字面可以看出他就是单元测试,作用是可以帮助我们在不运行整个项目的情况下,测试某个方法是否正确.

当然如果你取消了勾选也没关系,可以通过:File–>New–>Target来先创建一个Target(单元测试是一个独立的Target,不参与打包上传),

这里写图片描述

然后选择Test–>iOS Unit Testing Bundle,

这里写图片描述

这时候已经为项目添加了一个新的Target,作为测试单元.”工程名Tests”的分组,这个分组里就是XCTestCase的子类,XCTest中的测试类都是继承自XCTestCase。创建的单元测试和默认自带的单元测试文件一样,都会有以下四个函数:

- (void)setUp {    [super setUp];    //在类中的每个测试方法调用之前调用。}- (void)tearDown {    // 在类中的每个测试方法的调用后调用    [super tearDown];}- (void)testExample {    //功能测试用例的例子。}- (void)testPerformanceExample {    // 性能测试用例的一个例子。    [self measureBlock:^{    }];}

进行单元测试:

新建一个空项目,创建一个CalculateManager的类,在.h里写一个方法,暂且不去实现

////  CalculateManager.h//  Unit Test////  Created by ShaoFeng on 16/6/24.//  Copyright © 2016年 Cocav. All rights reserved.//#import <Foundation/Foundation.h>@interface CalculateManager : NSObject+ (NSInteger)addNumA:(NSInteger )numA numB:(NSInteger )numB;@end

然后我们在单元测试中,写一个功能测试的函数

注意

1.测试函数的要求是:1.必须是实例方法;2.必须无返回值;3.以test开头;

2.测试函数执行的顺序:以函数名中test后面的字符大小有关,比如-(void)test001XXX会先于-(void)test002XXX执行;

3.运行单元测试的快捷键:CMD + U,或者点击函数旁边的菱形这里写图片描述

- (void)testCalaulate{    XCTAssertEqual(20, [CalculateManager addNumA:10 numB:10]);}

这时候会报错:因为我们没有去实现方法,无法通过测试

这里写图片描述

到CalculateManager.m里将方法实现后,再次测试,成功通过

+ (NSInteger)addNumA:(NSInteger)numA numB:(NSInteger)numB{    return numA + numB;}

这里写图片描述

常用各种断言测试

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没有发生具体异常、具体异常名称的异常时通过测试,反之不通过
0 0
原创粉丝点击