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ユニットテストガイドをご一読ください。