2011年2月1日火曜日

iOSでのTest SenTestingKitについて

iOSでのTest SenTestingKitについて


概要

    iOSでのテストに使える、SenTestingKitの導入と解説



SenTestingKitとは

    http://developer.apple.com/tools/unittest.html


    iOSで使えるテスト用のフレームワーク。デフォルトで入っている。

    ソースコードでテストを書き、ビルド時にテストを行う。

    実行時ではないのがポイント。



手順

    1.ターゲットを作る

 

        ターゲットの作成が完了するとウインドウが開く。

        ここで、このターゲットが依存する実行可能ターゲットとか決められるんだけど、

        説明が長くなるのでパス。閉じる。




    2.アクティブなターゲットをSomethingTestに設定する



    3.テストのソースコード書く

    .h.mに別れるのが好ましくないので、SomethingTest.mという名前のソースのみ作成。



ソース:SomethingTest.m


#import <SenTestingKit/SenTestingKit.h>

#import <UIKit/UIKit.h>


@interface SomethingTest : SenTestCase {}

@end



@implementation SomethingTest


- (void) setUp {

    NSLog(@"setUp");

}


- (void) tearDown {

    NSLog(@"tearDown");

}


- (void) testSomething {

    NSLog(@"testSomething");

    STAssertTrue(FALSE, @"here comes");

}


@end


    もし、2を行わずに3を作った場合、ターゲット[SomethingTest]の、

    [ソースをコンパイル]の中に、SomethingTest.mが入っていないので、

    エラーが出ると思う。おとなしくD&Dで足すと、実行出来る筈。




    4.実行。

        このソースだとSTAssertが必ずFALSEなので、⌘+Bでビルドすると、

        ビルド時にエラーが出る。

        失敗(!)2 のとこをクリックすると、ビルド結果の表示がされる。

        ▲を押して潜って行くと、(テストを通らなかった)原因の内容を見る事ができる。

        STAssertの行を消すと、今度はエラー要因が無いので成功する。



以上。


STAssertTrueの他に、Equalsなどがある。



アレなところ

    成功するとどんなテストに通ったかとか見えない。


    setUpとtearDownがポインタの関係で非常にシビアになりやすい。

    tearDown後に落ちる場合はまずその辺りを疑う。


    テスト中にエラーが発生するともれなくテストのエラーが飛ばされる

    = Obj-Cのコンソールにエラー原因が出るような事が無い ので、むしろ悩む場合がある。

    実際にEmuや実機でテストの内容を実行(いろいろ手を加えて通常ターゲットから起動)して見ないと解決出来ないしょぼい私を許して。



今後

    非同期テストについては今後記述を足して行く。


0 件のコメント:

コメントを投稿

フォロワー