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




