昨日参加した エンジニアサポート CROSS 2014 に感化され、さっそくテストを書いてみましたw 今まであまりテストをしてこなかったことがバレバレですが、敢えてメモを晒してみます。
テスト用プロジェクトを作成
「XCTestSample」という名前でプロジェクトを作成しました。Xcode 5からはデフォルトでTestターゲットが作られるようです。
テストは XCTestSampleTests.m
に書いていきます。
すでに3つのメソッドが書かれていて、各テストの直前には setUp
メソッドが呼ばれ、直後には tearDown
は呼ばれるみたいです。
とりあえず実行してみる
メニューから [Product] > [Test] を選択、もしくは「⌘+U」でテストを実行します。
すると、さっそく失敗しました。
XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__);
XCTFail
というメソッドは、必ず失敗させるメソッドのようですね。とりあえずこの行はコメントアウトしてみます。
この状態でもう一度テストを実行してみると、今度はちゃんと成功しました。
他にもいろんなメソッド(Assertと言ったほうが良いのか?)が用意されているようです。
(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
の場合はそこでテストが失敗します。
テストを実行してみます。
99 は偶数でないため、ここでちゃんとテストが失敗しました。
こんな感じにテストを書いていくようです。
テスト書く利点
- コードが動くことを確認できる
- コードの質を高められる
- コードを変更した際も同じ精度で再テストできる
テストを書いてみた感想
書いてみたら意外と楽しかったw
この調子でbotsとかCIツールにも手を出してみようかな。
とっても参考になる記事
- [Xcode 5] Test Navigator と XCTestを使ってみる | DevelopersIO
- feb19.jp
- Why Test? - Apple
- Cocoa 勉強会関西で Unit Test について話しました - cockscomblog?
- http://blog.jarinosuke.com/entry/20120219/start_unit_testing_using_xcode4
id:basuke さんのスライドも大変参考になりました。