koogawa blog

iOS、Android、foursquareに関する話題

XcodeのテストフレームワークXCTestを使ってみる

昨日参加した エンジニアサポート CROSS 2014 に感化され、さっそくテストを書いてみましたw 今まであまりテストをしてこなかったことがバレバレですが、敢えてメモを晒してみます。

テスト用プロジェクトを作成

「XCTestSample」という名前でプロジェクトを作成しました。Xcode 5からはデフォルトでTestターゲットが作られるようです。

f:id:koogawa:20140118220502p:plain

テストは XCTestSampleTests.m に書いていきます。

すでに3つのメソッドが書かれていて、各テストの直前には setUp メソッドが呼ばれ、直後には tearDown は呼ばれるみたいです。

とりあえず実行してみる

メニューから [Product] > [Test] を選択、もしくは「⌘+U」でテストを実行します。

f:id:koogawa:20140118215301p:plain

すると、さっそく失敗しました。

XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__);

XCTFail というメソッドは、必ず失敗させるメソッドのようですね。とりあえずこの行はコメントアウトしてみます。

f:id:koogawa:20140118215326p:plain

この状態でもう一度テストを実行してみると、今度はちゃんと成功しました。

他にもいろんなメソッド(Assertと言ったほうが良いのか?)が用意されているようです。

f:id:koogawa:20140118215348p:plain

WWDCのPDFより)

偶数判定メソッドを作ってテストしてみる

引数が偶数かどうか判定するメソッドを作り、そのメソッドが正しく動いているかテストしてみます。

まずは偶数判定メソッド isEven を作ります。

#import "Test.h"

@implementation Test

+ (BOOL)isEven:(NSInteger)num
{
    if (num % 2 == 0) {
        return YES;
    }
    else {
        return NO;
    }
}

@end

次にテストを書いていきます。

- (void)testExample
{
    XCTAssertTrue([Test isEven:10]);
    XCTAssertTrue([Test isEven:0]);
    XCTAssertTrue([Test isEven:99]);
}

XCTAssertTrue メソッドは結果が YES であることを期待し、NO の場合はそこでテストが失敗します。

テストを実行してみます。

f:id:koogawa:20140118215510p:plain

99 は偶数でないため、ここでちゃんとテストが失敗しました。

こんな感じにテストを書いていくようです。

テスト書く利点

  • コードが動くことを確認できる
  • コードの質を高められる
  • コードを変更した際も同じ精度で再テストできる

テストを書いてみた感想

書いてみたら意外と楽しかったw

この調子でbotsとかCIツールにも手を出してみようかな。

とっても参考になる記事

id:basuke さんのスライドも大変参考になりました。