一、单元测试:测试范围小,仅仅测试一个小单元(如方法、函数不对的,对软件稳定有很大帮助)函数
二、集群测试:测试范围比较大,测试项目中的全部的功能单元测试
三、压力测试:模拟大批量数据/大数量的用户学习
单元测试的好处,即在测试文件中能够对某个正式方法进行测试,而不须要在正式文件中修改加测试,即文件和方法的测试分离。测试
新建立一个项目,iOS默认会自带单元测试:spa
测试文件继承了测试类:XCTestCasecode
// // IWMathTool.h // 0820单元测试 // // Created by Corwien on 16-8-20. // Copyright (c) 2016年 Corwien. All rights reserved. // 测试驱动开发 #import <Foundation/Foundation.h> @interface IWMathTool : NSObject /** * 计算两个整数的和 */ +(int)sumWithNum1:(int)num1 num2:(int)num2; @end
单元测试的方法名必须以 test开头blog
// // _820____Tests.m // 0820单元测试Tests // // Created by kaiyi on 16-8-20. // Copyright (c) 2016年 kaiyi. All rights reserved. // #import <XCTest/XCTest.h> #import "IWMathTool.h" // 引入须要测试的类文件 @interface _820____Tests : XCTestCase @end @implementation _820____Tests /** 单元测试2大颜色: 一、红色:测试失败 二、绿色:测试经过 */ - (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]; } /** * 单元测试的方法名必须以 test开头 */ -(void)testMath { int sum = [IWMathTool sumWithNum1:20 num2:10]; // 断言/猜想/估计 XCTAssertEqual(30, sum, @"IWMathTool方法有错"); } - (void)testExample { XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); } @end
单元测试2大颜色:
一、红色:测试失败
二、绿色:测试经过继承
根据测试错误分析,发现该方法尚未实现:ip
在IWMathTool.m中实现该方法:开发
#import "IWMathTool.h" @implementation IWMathTool +(int)sumWithNum1:(int)num1 num2:(int)num2 { return num1 + num2; } @end
而后再次测试,亮了绿灯,测试经过 ^_^
单元测试能够在一个测试方法中包含多个方法进行测试:
/** * 单元测试的方法名必须以 test开头 */ -(void)testMath { int sum = [IWMathTool sumWithNum1:20 num2:10]; // 断言/猜想/估计 XCTAssertEqual(30, sum, @"IWMathTool方法有错"); // 断言测试,指望为TRUE,不然返回提示语句,isPositive是否为正数 XCTAssertTrue([IWMathTool isPositive:10], @"IWMathTool方法有错"); }
有时候一个类的方法比较多,若是都写在一个测试文件中就显得比较凌乱,因此,这里能够对多方法的类单独写一个测试单元文件。
下面就以IWUser.h类作示例:
先选择Object-C test case Class类型的类
而后继承XCTestCase类
引入#import "IWUser.h"便可进行单元测试
// IWUserTest.m // 0820单元测试 #import <XCTest/XCTest.h> #import "IWUser.h" @interface IWUserTest : XCTestCase @end @implementation IWUserTest - (void)setUp { [super setUp]; } - (void)tearDown { // Put teardown code here. This method is called after the invocation of each test method in the class. [super tearDown]; } - (void)testExample { XCTAssertNotNil([IWUser user], @"user方法返回为空"); } @end
1.把测试的类代码独立到测试的文件中,业务代码和测试代码彻底分离,打包发布程序测试代码也不会包含在内,发布程序不用删除测试代码。
2.方法正确与否立刻就能根据颜色看到反馈,不用看打印的结果。
3.单元测试很是轻量级、快捷,只须要测试运行某个方法,而不用整个项目都Run起来,由于有时Run整个项目很耗时。
注意,单元测试只能测一些业务方法,UI是不能测试的。
若是之前没有单元测试,可能写好一个方法以后,而后再去在正式的类文件中进行赋值测试,或者等方法出错了才来修改,或者隔一段时间再次进行赋值重复测试,这样很是麻烦,因此,建议之后在项目中用单元测试。