Xcode(OCUnit)によるユニットテスト

XcodeはOCUnitによるObjective-Cユニットテストに標準で対応しており、アプリケーション又はライブラリィ用のプロジェクトを作成する際に同時にテストプロジェクトを作りさえすれば、あとはテスト用のクラス簡単にユニットテストを開始することができる。

ユニットテスト用のテスト用クラスの例(Ivar情報をラップしたRuntimeIvarクラスのテスト)

@interface TestRuntimeIvar : SenTestCase
{
    TestDto * dto;
}
@end
@implementation TestRuntimeIvar
- (void)setUp
{
    dto = [TestDto alloc];
    [super setUp];
}
- (void)tearDown
{
    dto = nil;
    [super tearDown];
}
- (void)testRuntimeIvar_TestDto_assetId
{
    RuntimeIvar* i = [[RuntimeIvar alloc] initWithClass:[dto class] ivar:@"assetId"];
    STAssertTrue(i != nil, nil);

    NSString* type = [i type];
    STAssertTrue([@"@\"NSString\"" isEqual:type], nil);

    NSString* name = [i name];
    STAssertTrue([@"assetId" isEqual:name], nil);

    [i setIvarValue:dto forValue:@"1234567890"];
    NSString* value = [i ivarValue:dto];
    STAssertTrue([@"1234567890" isEqual:value], nil);
}
@end

このようにxxUnitに準拠したクラスSenTestCaseを継承したクラスをウィザードから追加し、test〜という名前のメソッドを書けば、"Command + u"でテストを実行(Command+shift+Uでビルド)することができる。(外部に公開する必要が無いのでヘッダを別に書く必要が無い)

さて、ロジックのテストはこれで作っていけば良いが、GUIはどのようにテストするのだろう。