IOS开发学习之单元测试

1、软件测试分类

一、单元测试:测试范围小,仅仅测试一个小单元(如方法、函数不对的,对软件稳定有很大帮助)函数

二、集群测试:测试范围比较大,测试项目中的全部的功能单元测试

三、压力测试:模拟大批量数据/大数量的用户学习

单元测试的好处,即在测试文件中能够对某个正式方法进行测试,而不须要在正式文件中修改加测试,即文件和方法的测试分离。测试

2、单元测试学习

新建立一个项目,iOS默认会自带单元测试:
clipboard.pngspa

测试文件继承了测试类:XCTestCase
clipboard.pngcode

1.测试驱动开发

1.0测试类方法

1.1 先建立一个类,IWMathTool.h,并写一个简单的求和方法

//
//  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

1.2 而后在测试文件中引入该类,并建立该类的测试方法:

单元测试的方法名必须以 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

1.3 点击须要测试的方法testMath前边的运行按钮,便可进行测试:

clipboard.png

1.4 测试结果

单元测试2大颜色:
一、红色:测试失败
二、绿色:测试经过
clipboard.png继承

根据测试错误分析,发现该方法尚未实现:ip

clipboard.png

IWMathTool.m中实现该方法:开发

#import "IWMathTool.h"

@implementation IWMathTool

+(int)sumWithNum1:(int)num1 num2:(int)num2
{
    return num1 + num2;
}
@end

而后再次测试,亮了绿灯,测试经过 ^_^
clipboard.png

单元测试能够在一个测试方法中包含多个方法进行测试:

/**
 * 单元测试的方法名必须以 test开头
 */
-(void)testMath
{
    int sum = [IWMathTool sumWithNum1:20 num2:10];
    
    // 断言/猜想/估计
    XCTAssertEqual(30, sum, @"IWMathTool方法有错");
    
    // 断言测试,指望为TRUE,不然返回提示语句,isPositive是否为正数
    XCTAssertTrue([IWMathTool isPositive:10], @"IWMathTool方法有错");
}

2.一个类对应一个单元测试文件

有时候一个类的方法比较多,若是都写在一个测试文件中就显得比较凌乱,因此,这里能够对多方法的类单独写一个测试单元文件。

下面就以IWUser.h类作示例:

2.1 新建一个IWUser.h类

2.2 为User类新建一个单元测试类

先选择Object-C test case Class类型的类
clipboard.png

而后继承XCTestCase
clipboard.png

引入#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

3、单元测试的好处

1.把测试的类代码独立到测试的文件中,业务代码和测试代码彻底分离,打包发布程序测试代码也不会包含在内,发布程序不用删除测试代码。
2.方法正确与否立刻就能根据颜色看到反馈,不用看打印的结果。
3.单元测试很是轻量级、快捷,只须要测试运行某个方法,而不用整个项目都Run起来,由于有时Run整个项目很耗时。

注意,单元测试只能测一些业务方法,UI是不能测试的。

若是之前没有单元测试,可能写好一个方法以后,而后再去在正式的类文件中进行赋值测试,或者等方法出错了才来修改,或者隔一段时间再次进行赋值重复测试,这样很是麻烦,因此,建议之后在项目中用单元测试。

相关文章
相关标签/搜索