&tag(Objective-C, Xcode);
*目次 [#b77a5860]
#contents

*参考情報 [#c0bff3e2]
-[[iUnitTest - リンゴの水やり?(はてな):http://d.hatena.ne.jp/gutskun/20090130/1233285096]]
-[[[iPhone][Develop][Test] iUnitTestを使ってみた。 - Ni chicha, ni limona - 平均から抜けられない僕 - iPhoneアプリ開発グループ:http://iphone-dev.g.hatena.ne.jp/paella/20090528/1243500045]]

*基本 [#i098b51f]
-標準のSenTestingKitが使いにくいので(デバッガ使えないし)、iUnitTestを使ってみる。

*インストール [#rb22da9b]

**ソースのダウンロード [#x58ef51f]
**ダウンロード [#x58ef51f]
http://github.com/katsuyoshi/iunittest からダウンロード
 git clone http://github.com/katsuyoshi/iunittest.git
自分用
 git clone git@github.com:src256/iunittest.git

**セットアップ [#g05cbb48]
**本体のインストール [#g05cbb48]
ダウンロードしたフォルダに移動しsetup実行
 sudo ./setup

**オープンコードのインストール [#r56c7f7c]
-シミュレータでエラーになった行をXcodeで表示してくれるopencodeというツールも同時にインストールしておく。
-tools/opencodeに移動。
 cd tools/opencode
-opencode.xcodeprojをXcodeで開きビルド(Releaseが良い?)
-バイナリを/usr/local/binにコピー
 sudo cp build/Release/opencode /usr/local/bin
-installスクリプトを実行。ログイン時に自動起動する設定になる。
 ./install
-ログアウト&ログイン。



*サンプルプロジェクト作成 [#q760a6bd]
-チュートリアル通りに実行できなかった。
-UINavigationBarBasedTestのテンプレートがなくなっているのでUITableViewControllerTest subclassを使ってみた(2010/07/30)
**ターゲットの作成 [#k53f986a]
-Navigationベースで新規プロジェクトを作成。名前は"Prefectures"。
-RootViewController.hを修正。
#pre{{
@interface RootViewController : UITableViewController {
	NSArray* dataSource;
}

}}
-RootViewController.mを修正。
#pre{{
- (void)viewDidLoad {
    [super viewDidLoad];
	dataSource = [[NSArray alloc] initWithObjects:
				  [NSArray arrayWithObject:@"Hokkaido"],
				  [NSArray arrayWithObjects:@"Aomori", @"Iwate", @"Akita", @"Yamagata", @"Miyagi", @"Fukusima", nil],
				  nil];
}

- (void)dealloc {
	[dataSource release];
    [super dealloc];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return dataSource.count;
}

}}
**テストプロジェクトの作成 [#f90b0e85]
-ファイル→新規プロジェクト→User Templates →Application→iUnitTest Applicationを選択。名前は"PrefecturesTest"。
-とりあえず一回実行して失敗することを確認。
-TargetClassに"Prefectures"プロジェクトのRootViewController.[h,m]を追加。参照。
-Testsクラスを右クリックして、追加→新規ファイルで、UITableViewControllerTest subclassを選択。名前は"RootViewControllerTest"
-RootViewController.mを編集。デフォルトのテストを削除し以下に置き換える。
#pre{{
- (NSString *)viewControllerName
{
    return @"RootViewController";
}

- (BOOL)hasNavigationController
{
    return YES;
}

- (void)testNumberOfSectionsInTableView
{
//    ASSERT_FAIL(@"not implemented");
	ASSERT_EQUAL_INT(2, [self.tableViewController  numberOfSectionsInTableView:self.tableViewController.tableView]);
}

}}
-実行して成功すればOK。

*Tips [#ad859bf1]

**ASSERTマクロの使い分け [#x76ea0d1]
[[[iPhone][Develop][Test] iUnitTestを使ってみた。 - Ni chicha, ni limona - 平均から抜けられない僕 - iPhoneアプリ開発グループ:http://iphone-dev.g.hatena.ne.jp/paella/20090528/1243500045]]より

|ASSERT(value)|真の場合OK|
|ASSERT_FAIL(m)|常に失敗|
|ASSERT_SAME(_expected, _value)|==演算子で比較|
|ASSERT_NOT_SAME(_expected, _value)|==演算子で比較|
|ASSERT_EQUAL(_expected, _value)|isEqualメソッドで比較|
|ASSERT_NOT_EQUAL(_expected, _value)|isEqualメソッドで比較|
|ASSERT_EQUAL_INT(_expected, _value)|int型特化|
|ASSERT_NOT_EQUAL_INT(_expected, _value)|int型特化|
|ASSERT_EQUAL_FLOAT(_expected, _value)|float型特化|
|ASSERT_NOT_EQUAL_FLOAT(_expected, _value)|float型特化|
|ASSERT_EQUAL_FLOAT_DELTA(_expected, _value, _delta)|float型特化。許容誤差指定|
|ASSERT_EQUAL_DOUBLE(_expected, _value)|double型特化|
|ASSERT_NOT_EQUAL_DOUBLE(_expected, _value)|double型特化|
|ASSERT_EQUAL_DOUBLE_DELTA(_expected, _value, _delta)|double型特化。許容誤差指定|
|ASSERT_NIL(_value)|nilかどうか|
|ASSERT_NOT_NIL(_value)|nilかどうか|
|ASSERT_EQUAL_POINT(_expected, _value)|CGPoint型特化|
|ASSERT_EQUAL_SIZE(_expected, _value)|CGSize型特化|
|ASSERT_EQUAL_RECT(_expected, _value)|CGRect型特化|
|ASSERT_RAISE(expr)|例外指定|
|ASSERT_NOTHING_RAISED(expr)|例外指定|

**特定クラス・メソッドのみ実行 [#ocf217e6]
[[iUnitTestでやった事 - リンゴの水やり?(はてな):http://d.hatena.ne.jp/gutskun/20091126/1259173258]]によるとiPhoneのUIには仕組みが準備されてないので、テストコード変更する。#define TEST_ALWAYSを有効にする。
#pre{{
// Uncomment it, if you want to test this class except other passed test classes.
//#define TESTS_ALWAYS
#ifdef TESTS_ALWAYS
- (void)testThisClassAlways { ASSERT_FAIL(@"fail always"); }
+ (BOOL)forceTestsAnyway { return YES; }
#endif
}}

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS