SenTestingKitとJenkinsを使用したiOSプロジェクトへのCIの導入(1)

LevelHelperとSpriteHelperの和訳が進んでいませんが、けっこうハマったので。

 

SenTestingKitやJenkins、継続的インテグレーション(CI)については、情報が出回っていると思いますので、導入手順にのみ焦点を当てて説明したいと思います。

 

今回はプロジェクトの作成から手動でのカバレッジの取得まで、
次回はjenkinsを利用したカバレッジの取得を説明します。

今回の内容は、以下の通りです。

1. プロジェクトの作成
2. テスト対象のクラスを作成
3. テストクラスの作成
4. 設定を変更後、XcodeからUnitTestを実行し、カバレッジ取得に必要なファイルが
 生成されることを確認

 

また、今回のプロジェクトは以下のURLからcloneできます。

 https://github.com/nerd0geek1/SenTestingKitSample.git

 

1. プロジェクトの作成

File->New->Projectで新規プロジェクトの作成を行います。
今回は"Single View Application"を選択します。

f:id:nerd0geek1:20130916124351p:plain

"Include Unit Tests"にチェックするのを忘れずに。
Xcode5からは、ここの選択がなくなり、常にSenTestingKitが含まれた状態で
プロジェクトが生成されます。

f:id:nerd0geek1:20130916123841p:plain

 

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

テスト対象となるクラスを作成します。
今回は計算を行うクラスとしてSPCalcというクラスを作成します。
この時、Targetsのうち、SampleProjectTestsにもチェックを付けることを忘れずに。

f:id:nerd0geek1:20130916131826p:plain

内容はごく簡単に以下のようにします。

SPCalc.h

//
//  SPCalc.h
//  SampleProject
//
//  Created by 田畑浩平 on 2013/09/16.
//  Copyright (c) 2013年 Kohei Tabata. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface SPCalc : NSObject

+ (NSInteger)addX:(NSInteger)x Y:(NSInteger)y;

@end

 SPCalc.m

//
//  SPCalc.m
//  SampleProject
//
//  Created by 田畑浩平 on 2013/09/16.
//  Copyright (c) 2013年 Kohei Tabata. All rights reserved.
//

#import "SPCalc.h"

@implementation SPCalc

+ (NSInteger)addX:(NSInteger)x Y:(NSInteger)y
{
    return x + y;
}

@end

 

3. テストクラスの作成

2.で作成したSPCalcをテストするためのクラスを作成します。
SenTestCaseのサブクラスとしてSPCalcTestsというクラスを作成します。
テストからのみ参照できればよいので、Targetsは以下のようにします。

f:id:nerd0geek1:20130916135251p:plain

内容は以下のようにします。

SPCalcTests.h

//
//  SPCalcTests.h
//  SampleProject
//
//  Created by 田畑浩平 on 2013/09/16.
//  Copyright (c) 2013年 Kohei Tabata. All rights reserved.
//

#import <SenTestingKit/SenTestingKit.h>

@interface SPCalcTests : SenTestCase

@end

SPCalcTests.m

//
//  SPCalcTests.m
//  SampleProject
//
//  Created by 田畑浩平 on 2013/09/16.
//  Copyright (c) 2013年 Kohei Tabata. All rights reserved.
//

#import "SPCalcTests.h"

#import "SPCalc.h"

@implementation SPCalcTests

- (void)testAdd
{
    STAssertEquals([SPCalc addX:1 Y:2], 3, @"add x: y: error");
}

@end

 

また、プロジェクト作成時に、[Project Name]Testsという名前のクラスが生成されますが、この中にテストを失敗させるためのマクロ、STFailが含まれているので、これを削除します。

f:id:nerd0geek1:20130916135851p:plain

 

4. 設定を変更後、XcodeからUnitTestを実行し、カバレッジ取得に必要なファイルが生成されることを確認

Test用のTargetを選択した状態で以下の3つをYESにします。

・Instrument Program Flow
・Generate Profiling Code
・Generate Test Coverage Files

f:id:nerd0geek1:20130916140824p:plain

変更が完了したら、cmd + UでUnit Testを実行し、カバレッジ取得に必要なファイル(.gcda, .gcno)が生成されていることを確認します。
確認するためには、以下のディレクトリに移動します。SampleProjectとなっている箇所にはプロジェクト名が入るので、適宜読み替えてください。
/Users/[user name]/Library/Developer/Xcode/DerivedData/SampleProject-alprvnzzbettspdiyvnlwnixymzk/Build/Intermediates/SampleProject.build/Debug-iphonesimulator/SampleProjectTests.build/Objects-normal/i386

生成に成功していた場合、ディレクトリ内が以下のようになっているはずです。

f:id:nerd0geek1:20130916142344p:plain

この時点でもCover Storyなどで赤線内の2ファイルを読みこめば、SPCaclファイルのカバレッジを取得できるはずです。

 

次回、jenkinsのインストールからカバレッジの取得までを説明します。