まいまいワークス

主にiPhoneアプリの開発で考えた事、調べた事、感じた事などを記していきます。

Xcodeユニットテスト事始め

自作クラスに対して、修正が入るたびに手動でテストを行うのはあまりにも非効率なのでユニットテストの調査を行いました。
本エントリはその初歩の初歩。

テスト対象のクラスを作成

ここではテスト用の簡単なクラスを定義します。

#import <Foundation/Foundation.h>

@interface MyClass : NSObject


@property(nonatomic, assign)int a;
@property(nonatomic, assign)int b;
-(int)calcAdd;


@property(nonatomic, strong)NSString* aaa;
@property(nonatomic, strong)NSString* bbb;
-(NSString*)strfunc;

@end

ここではint型のaとbをcalcAddに食わせて結果を得るメソッド
NSString型のaaaとbbbをstrfuncに食わせて結果を得るメソッドの2つを定義します。

#import "MyClass.h"

@implementation MyClass

-(int)calcAdd{
    return _a+_b;
}

-(NSString*)strfunc{
    return [NSString stringWithFormat:@"%@%@",_aaa, _bbb];
}

@end

aとbを加算、aaaとbbbを接続するだけの簡単なクラスです。

テストの記述

xxxx.hファイルは不要、xxxx.mだけで良さそうです。
ここではnewTest.mファイルを作成します。
testではじまるメソッド名のメソッドがテストメソッドと見なされるようです。

#import <XCTest/XCTest.h>       //これはお約束
#import "MyClass.h"         //テスト対象のクラスをインポート

@interface newTest : XCTestCase

@end


@implementation newTest

-(void)testCalcAdd{
    MyClass* calc = [MyClass new];
    calc.a = 3;
    calc.b = 4;
    XCTAssertEqual([calc calcAdd], 7, @"エラー!");
}

-(void)testStr{
    MyClass* str = [MyClass new];
    str.aaa = @"abc";
    str.bbb = @"def";
    XCTAssertEqualObjects([str strfunc], @"abcdef", @"エラー!");
}

@end

各メソッドともにインスタンス化してプロパティ設定を行うところまでは通常のクラスの実行と同じです。
この後の行に書かれているのがテスト関数になります。
XCTAssertEqual(値1, 値2, @"メッセージ");
値1と値2を比較して、値1 == 値2となることが確認できればテスト成功。
失敗の場合はメッセージを出力します。

XCTAssertEqualObjects(object1, object2, @"メッセージ");
object1とobject2を比較して[object1 isEqual:object2]で等しい事を確認できればテスト成功。
失敗の場合はメッセージを出力します。

テスト実行

Product>Testもしくは⌘Uでテストを実行します。

詳細な情報

関数などの詳細な情報はXcodeユニットテストガイドをご一読ください。