你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 淺談iOS單元測試

淺談iOS單元測試

編輯:IOS開發綜合

什麼是單元測試?

單元測試(unit testing),是指對軟件中的最小可測試單元進行檢查和驗證。對於單元測試中單元的含義,一般來說,要根據實際情況去判定其具體含義,如C語言中單元指一個函數,Java裡單元指一個類,圖形化的軟件中可以指一個窗口或一個菜單等。總的來說,單元就是人為規定的最小的被測功能模塊。

iOS中單元測試有什麼意義?

大型項目開發,功能比較繁瑣,代碼量比較大,調試某一塊功能需要不斷的Command+R運行調試,很顯然這樣的功能是非常非常的低效的,編寫過程中以及App功能完成後為檢測某一塊功能,利用單元測試更有針對性的測試功能。兩個字——高效!

添加單元測試

1.新工程默認會勾選

這裡寫圖片描述

2.為老工程添加單元測試
點擊File—–>New——->Target
這裡寫圖片描述

熟悉單元測試類

這裡寫圖片描述
UnitTestsDemoTests類是繼承與 XCTestCase的

#import 

@interface UnitTestsDemoTests : XCTestCase

@end

@implementation UnitTestsDemoTests

- (void)setUp {
    [super setUp];
    /**
     *  每個test方法執行之前調用
     *
     */
}

- (void)tearDown {
    [super tearDown];
    /**
     *  每個test方法執行之後調用
     */
}

- (void)testExample {
    /**
     *  命名為Example的測試方法
     */
}

- (void)testPerformanceExample {
    //主要檢測代碼的執行性能
    [self measureBlock:^{

    }];
}

@end

Xcode7默認帶了測試性能的方法- (void)testPerformanceExample很有意思的一個方法

- (void)testPerformanceExample {
    // This is an example of a performance test case.
    [self measureBlock:^{
        // Put the code you want to measure the time of here.
        for(int i=0;i<1000;i++)
        {
            NSLog(@"%d",i);
        }
    }];
}

重復執行上面的代碼,會收集每次執行的時間,並計算出平均值,每次執行後會跟平均值進行比較,給你參考性的提示。

這裡寫圖片描述
這裡寫圖片描述

當我們把i的值後面增添一個0有意思一幕發生

這裡寫圖片描述

XCode檢測到這一次運行,遠超過了平均值,給出了紅色的警告,是不是感覺XCode太強大了?

認識測試符號

這裡寫圖片描述警告不通過符號,說明這個模塊出現問題<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvcD4NCjxwPjxpbWcgYWx0PQ=="這裡寫圖片描述" src="/uploadfile/Collfiles/20160501/20160501123128294.png" title="\" />通過符號,表示這個模塊沒有問題

自定義測試方法

自定義測試方法必須以test方法名開頭(testXXX),例如上面的testExample

自定義方法必須為void返回類型
-(void)testFloatEqual{}

單元測試常用的宏

XCTAssertEqualObjects(a1, a2, description, …)

XCTAssertEquals(a1, a2, description, …)

XCTAssertEqualsWithAccuracy(a1, a2, accuracy,description, …)

XCTFail(description, …)

XCTAssertNil(a1, description, …)

XCTAssertNotNil(a1, description, …)

XCTAssertTrue(expr, description, …)

XCTAssertTrueNoThrow(expr, description, …)

XCTAssertFalse(expr, description, …)

XCTAssertFalseNoThrow(expr, description, …)

XCTAssertThrows(expr, description, …)

XCTAssertThrowsSpecific(expr, specificException, description, …)

XCTAssertThrowsSpecificNamed(expr, specificException, aName, description, …)

XCTAssertNoThrow(expr, description, …)

XCTAssertNoThrowSpecific(expr, specificException, description, …)

XCTAssertNoThrowSpecificNamed(expr, specificException, aName, description, …)

Come on 動起來

普通測試

-(void)testFloatEqual{
    NSLog(@"這是自定義的測試方法");
    float a=100.00;
    XCTAssertEqual(a, 100.00,@"測試不通過");
}

類測試

先在XCode創建一個類名為PersonModel ,添加一個屬性名為name

@interface PersonModel : NSObject
@property(nonatomic,strong)NSString *name;

@end
@implementation PersonModel
-(id)init
{
    if (self=[super init]) {
        _name=@"單元測試";
    }
    return self;
}
@end

在測試單元創建一個類
這裡寫圖片描述

點擊右鍵,New Test Class
這裡寫圖片描述
注意此類繼承與XCTestCase

在頭文件中引入#import "PersonModel.h"

自定義一個測試方法

-(void)testClassName
{
    PersonModel *perModel=[[PersonModel alloc]init];
    XCTAssertEqual(perModel.name, @"單元測試",@"name跟預期的不相等呀");
}

今天寫了好多模塊功能,檢測下都是否正常

這裡寫圖片描述

  1. 上一頁:
  2. 下一頁:
Copyright © Ios教程網 All Rights Reserved