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是不能測試的。

若是之前沒有單元測試,可能寫好一個方法以後,而後再去在正式的類文件中進行賦值測試,或者等方法出錯了纔來修改,或者隔一段時間再次進行賦值重複測試,這樣很是麻煩,因此,建議之後在項目中用單元測試。

相關文章
相關標籤/搜索