2012年2月12日日曜日

UnitTests

Mac OS X アプリ向けサンプルコード。スタティックライブラリのビルドと単体テスト、そしてアプリテストコードなど。


ターゲットはライブラリとアプリ、それぞれのテストで計4つ。

スタティックライブラリ Calculator-Mac を電卓アプリ Mac_Calc で利用する構成となっている。このライブラリは電卓のロジックを受け持っていて input: メソッドで "6" "+" "2" "=" と順々に渡すと結果を返す作りになっている。

ライブラリのテストはごく普通の OCUnit によるテストコード(Logic Test)。
- (void) testAddition {
   NSLog(@"%@ start", self.name);   // self.name is the name of the test-case method.
   [calculator input:@"6"];
   [calculator input:@"+"];
   [calculator input:@"2"];
   [calculator input:@"="];
   STAssertTrue([[calculator displayValue] isEqualToString:@"8"], @"");
   NSLog(@"%@ end", self.name);
}

アプリは簡単な電卓。


このアプリをテストするコードが付いている。
- (void) setUp {
   app                  = [NSApplication sharedApplication];
   calc_view_controller =
    (CalcViewController*)[[NSApplication sharedApplication] delegate];
   calc_view            = calc_view_controller.view;
}

- (void) testAddition {
   [calc_view_controller press:[calc_view viewWithTag: 6]];  // 6
   [calc_view_controller press:[calc_view viewWithTag:13]];  // +
   [calc_view_controller press:[calc_view viewWithTag: 2]];  // 2
   [calc_view_controller press:[calc_view viewWithTag:12]];  // =   
   STAssertTrue([[calc_view_controller.displayField stringValue]
     isEqualToString:@"8"], @"Part 1 failed.");   
}
面白いのはビューコントローラに対してテスト実行しているところ。上記の press: は IBAction で画面上のボタンを押した時に呼ばれるメソッド。
@interface CalcViewController : NSViewController {
 IBOutlet id displayField;
   Calculator *calculator;
}

@property (nonatomic, retain) IBOutlet id displayField;

- (IBAction)press:(id)sender;

@end

この方法なら機能的なテストができる。UIオペレーションのテストは面倒なところなので、これだけでも最低限のテストとしていいかもしれない。


0 件のコメント:

コメントを投稿