こんにちはこんばんわ!azuの記事に触発されて使ってみる事にしました!!!

■ダウンロード

gh-unit -> Downloadsで特別な理由がない場合は最新版を使いましょう。

■ターゲットの追加

Project navigatorでProjectを選択し、Add Targetをクリックしてください。

次に、Window Based ApplicationでProduct NameをTestsとして適当にターゲットを追加します。

frameworkの追加

Project navigatorでProjectを選択し、TargetでTestsを選択した後、Build PhasesからLink Binary With Librariesを開き、ダウンロードしてできたframeworkを追加してください。

Info.plist

Test/Supporting Files/Test-Info.plistを選択してMain nib file base nameの属性を削除します。

ファイルの削除

Test配下の以下のファイルを削除してください。

  • TestAppDelegate.h
  • TestAppDelegate.m
  • MainWindow.xib
  • Supporting Files以外のディレクトリ

■リンク

Project navigatorでProjectを選択し、TargetでTestsを選択した後、Build SettingからOther Linker Flagを選択し、以下の記述を加えてください。

  • -ObjC
  • -all_load

■Test/main.m

以下の部分を

[cc lang="c"]
int retVal = UIApplicationMain(argc, argv, nil, nil);
[/cc]

以下のように変更します。

[cc lang="c"]
int retVal = UIApplicationMain(argc, argv, nil, @”GHUnitIOSAppDelegate”);
[/cc]

■テストケース

Test配下に書いていきす。但し、ターゲットはTestsにしてファイルを新しく追加します。

Test/MyTest.m

以下のように試しに書いてみました。

[cc lang="c"]
#import
@interface MyTest : GHTestCase {
}
@end

@implementation MyTest
- (void)testStrings {
NSString *string1 = @”a string”;
GHTestLog(@”I can log to the GHUnit test console: %@”, string1);

// Assert string1 is not NULL, with no custom error description
GHAssertNotNULL(string1, nil);

// Assert equal objects, add custom error description
NSString *string2 = @”a string”;
GHAssertEqualObjects(string1, string2, @”A custom error message. string1 should be equal to: %@.”, string2);
GHAssertEquals(1, 1, @”test”);
}

// わざとエラーを出してみる
- (void)testNums {
GHAssertEquals(1, 2, @”test”);
}
@end
[/cc]

テストメソッド名はtestから始めなくてはいけないですね。ちなみにGHAssertまで入力すれば大体どんなアサーションがあるのか確認できます。

■実際のテスト

ほとんどの記事を見ても実際のテストコードに近いコードがみつかりませんでした。困ったので実際に使えそうなコードを自力で書いてみました。

Util.m

Utilクラスです。URLエンコードしたりデコードしたりするメソッドがあります。

[cc lang="c"]
#import
@interface Util : NSObject {
}
+ (NSString *)urlencode:(NSString *)text;
+ (NSString *)urldecode:(NSString *)text;
@end

@implementation Util
//encode
+ (NSString *)urlencode:(NSString *)text
{
return (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef)text,NULL,(CFStringRef)@”!*’();:@&=+$,/?%#[]“,kCFStringEncodingUTF8);
}

// decode
+ (NSString *)urldecode:(NSString *)text
{
return (NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,(CFStringRef) text,CFSTR(“”),kCFStringEncodingUTF8);
}
@end
[/cc]

注意点としては、テストクラスからインポートする為に、Util.mのファイルのターゲットにTestsを加える点です。

UtilTest.m

[cc lang="c"]
#import
#import “Util.h”
@interface UtilTest : GHTestCase {
}
@end

@implementation UtilTest
- (void)test_urlencode
{
NSString *url1 = [NSString stringWithString:@"%E3%83%86%E3%82%B9%E3%83%88%E3%82%B1%E3%83%BC%E3%82%B9"];
NSString *url2 = [NSString stringWithString:[Util urlencode:@"テストケース"]];
GHAssertEqualObjects(url1, url2, @”match!”);

NSString *url3 = [NSString stringWithString:@"%E9%9A%A3%E4%BA%BA%E3%81%AF%E7%BE%8E%E4%BA%BA"];
NSString *url4 = [NSString stringWithString:[Util urlencode:@"隣人は美人"]];
GHAssertEqualObjects(url3, url4, @”match!”);
}

- (void)test_urldecode
{
NSString *url1 = [NSString stringWithString:[Util urldecode:@"%E3%83%86%E3%82%B9%E3%83%88%E3%82%B1%E3%83%BC%E3%82%B9"]];
NSString *url2 = [NSString stringWithString:@"テストケース"];
GHAssertEqualObjects(url1, url2, @”match!”);

NSString *url3 = [NSString stringWithString:[Util urldecode:@"%E9%9A%A3%E4%BA%BA%E3%81%AF%E7%BE%8E%E4%BA%BA"]];
NSString *url4 = [NSString stringWithString:@"隣人は美人"];
GHAssertEqualObjects(url3, url4, @”match!”);
}
@end
[/cc]

これでTestsをターゲットにRunすればテストができますね。ちなみにですが、テストクラスの名前にはTestがつかなくても特に問題ないようです。

参考

■まとめ

殆ど公式ドキュメントと変わりませんが日本語がスキな方に読んでいただければと思います。

Post Navigation