トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Tag: Objective-C Xcode

目次 Edit

参考情報 Edit

基本 Edit

  • 標準のSenTestingKitが使いにくいので(デバッガ使えないし)、iUnitTestを使ってみる。

インストール Edit

ダウンロード Edit

http://github.com/katsuyoshi/iunittest からダウンロード

git clone http://github.com/katsuyoshi/iunittest.git

自分用

git clone git@github.com:src256/iunittest.git

本体のインストール Edit

ダウンロードしたフォルダに移動しsetup実行

sudo ./setup

オープンコードのインストール Edit

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

サンプルプロジェクト作成 Edit

  • チュートリアル通りに実行できなかった。
  • UINavigationBarBasedTestのテンプレートがなくなっているのでUITableViewControllerTest subclassを使ってみた(2010/07/30)

ターゲットの作成 Edit

  • Navigationベースで新規プロジェクトを作成。名前は"Prefectures"。
  • RootViewController.hを修正。
    @interface RootViewController : UITableViewController {
    	NSArray* dataSource;
    }
    
    
  • RootViewController.mを修正。
    - (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;
    }
    
    

テストプロジェクトの作成 Edit

  • ファイル→新規プロジェクト→User Templates →Application→iUnitTest Applicationを選択。名前は"PrefecturesTest"。
  • とりあえず一回実行して失敗することを確認。
  • TargetClassに"Prefectures"プロジェクトのRootViewController.[h,m]を追加。参照。
  • Testsクラスを右クリックして、追加→新規ファイルで、UITableViewControllerTest subclassを選択。名前は"RootViewControllerTest"
  • RootViewController.mを編集。デフォルトのテストを削除し以下に置き換える。
    - (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 Edit

ASSERTマクロの使い分け Edit

[iPhone][Develop][Test] iUnitTestを使ってみた。 - Ni chicha, ni limona - 平均から抜けられない僕 - iPhoneアプリ開発グループより

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)例外指定

特定クラス・メソッドのみ実行 Edit

iUnitTestでやった事 - リンゴの水やり?(はてな)によるとiPhoneのUIには仕組みが準備されてないので、テストコード変更する。#define TEST_ALWAYSを有効にする。

// 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
Last-modified: 2010-07-30 (金) 11:46:18 (1024d)