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オペレーションのテストは面倒なところなので、これだけでも最低限のテストとしていいかもしれない。