IOS開発学習のユニットテスト


一、ソフトウェアテスト分類


1、ユニットテスト:テスト範囲が小さく、ただ一つの小さいユニットをテストする(例えば方法、関数が間違っている場合、ソフトウェアの安定に役立つ)
2、クラスターテスト:テスト範囲が比較的に大きくて、テスト項目の中のすべての機能
3、圧力テスト:大量のデータ/大量のユーザーを模擬する
ユニットテストの利点は、テストファイルで正式な方法をテストすることができ、正式なファイルでテストを追加する必要がなく、つまりファイルと方法のテストが分離されることです.

二、ユニットテスト学習


iOSのデフォルトでは、ユニットテストが付属するプロジェクトが新しく作成されました.
テストファイルはテストクラスを継承しています:XCTestCase

1.テスト駆動開発


1.0クラスメソッドのテスト


1.1まずクラスを作成します。IWMathTool.h、そして1つの簡単な和を求める方法を書きます

//
//  IWMathTool.h
//  0820 
//
//  Created by Corwien on 16-8-20.
//  Copyright (c) 2016  Corwien. All rights reserved.
//   

#import 

@interface IWMathTool : NSObject

/**
 *  
 */
+(int)sumWithNum1:(int)num1 num2:(int)num2;
@end

1.2次に、テストファイルにクラスを導入し、そのクラスのテスト方法を作成する。


ユニットテストのメソッド名はtestで始まる必要があります
//
//  _820____Tests.m
//  0820 Tests
//
//  Created by kaiyi on 16-8-20.
//  Copyright (c) 2016  kaiyi. All rights reserved.
//

#import 
#import "IWMathTool.h"   //  
@interface _820____Tests : XCTestCase

@end

@implementation _820____Tests

/**
  2 :
 1、 : 
 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の前の実行ボタンをクリックすると、テストを行うことができます。


1.4テスト結果


ユニットテスト2大色:1、赤:テスト失敗2、緑:テスト合格
テストエラー分析によると、この方法はまだ実装されていないことがわかりました.
IWMathToolでmでこの方法を実現する:
#import "IWMathTool.h"

@implementation IWMathTool

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

それから再度テストして、青信号をつけて、テストは合格しました^^;
ユニットテストは、1つのテスト方法に複数の方法を含めてテストできます.
/**
 *   test 
 */
-(void)testMath
{
    int sum = [IWMathTool sumWithNum1:20 num2:10];
    
    //  / / 
    XCTAssertEqual(30, sum, @"IWMathTool ");
    
    //  , TRUE, ,isPositive 
    XCTAssertTrue([IWMathTool isPositive:10], @"IWMathTool ");
}

2.1つのクラスが1つのユニットに対応するテストファイル


1つのクラスの方法が多い場合があり、1つのテストファイルに書くと乱れているように見えますので、ここでは複数の方法のクラスに対して単独でテストユニットファイルを書くことができます.
次はIWUser.hクラスの例:

2.1 IWUserを新規作成します。hクラス


2.2 Userクラスのユニットテストクラスを新規作成する


Object-C test case Classタイプのクラスを先に選択
次にXCTestCaseクラスを継承
#import"IWUser.h"を導入すればユニットテストが可能
//  IWUserTest.m
//  0820 
#import 
#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はテストできません.
以前ユニットテストがなかった場合は、1つの方法を書いてから、正式なクラスファイルで付与テストを行ったり、方法が間違ってから修正したり、時間を置いて再度付与繰り返しテストを行ったりするのは面倒なので、後でプロジェクトでユニットテストを使用することをお勧めします.