涼風コンピュータblog

涼風 ・Rubyist, RubyやRuby on Railsに詳しくなっていきたいです

テストフレームワークGHUnitを試してみた

こんにちは。InputだけでなくOuputして、技術を身につけたいと思っている涼風です。

そこで今回はxUnitと呼ばれる単体テストフレームワーク中で、iOSでないかと探しましたら、GHUnitがありました。今回は、こちらの記事をもとにGHUnitを試してみました。

GHUnitで単体テストをしてみよう

★ GHUnitのダウンロード

以下URLから「GHUnitIOS-x.x.xx.zip」をダウンロードします。
https://github.com/gabriel/gh-unit/downloads

2012/11/15現在、最新のGUnitIOS-0.5.6.zipをダウンロードしました。 Mac OS X バージョン10.8.2を使用しました。

SampleTestMain.mないでGHUStackTraceFromException(exception)がコンパイルエラーになったため、[GHTesting descriptionForException:exception]に変更し、#import <GHUnitIOS/GHTesting.h>を追加しました。

SampleTestMain.m

#import <GHUnitIOS/GHUnit.h>
#import <GHUnitIOS/GHTesting.h>

void exceptionHandler(NSException *exception) {
    NSLog(@"%@\n%@", [exception reason], [GHTesting descriptionForException:exception]);
}

int main(int argc, char *argv[]) {
    NSSetUncaughtExceptionHandler(&exceptionHandler);
    
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    
    int retVal = 0;
    if (getenv("GHUNIT_CLI")) {
        retVal = [GHTestRunner run];
    } else {
        retVal = UIApplicationMain(argc, argv, nil, @"GHUnitIPhoneAppDelegate");
    }
    
    [pool release];
    return retVal;
}

判定するマクロ GHAssertEqualsは以下のような引数を持ちます。
GHAssertEquals(左の値, 右の値, 失敗したときに標準出力に表示する文字列)
左の値と右の値が異なるときに失敗します。

@"test"を@"計算結果に誤りがあります"に変更します。

- (void)testDivideRoundUp
{
    NSInteger num = [Calc divideRoundUp:100 denominator:3];
    GHAssertEquals(num, 33, @"計算結果に誤りがあります");
}

ほかに判定マクロはGHUnitIOS.framework/Headers/GHTestMacros.hにあります。

GHAssertNotNil(オブジェクト, 失敗したときに標準出力に表示する文字列)
オブジェクトがnilのとき失敗します。

GHAssertTrue(評価式, 失敗したときに標準出力に標示する文字列)
評価式がfalseのときに失敗します。

他にもまだマクロはたくさんあります。