Xcodeで簡単なユニットテストを試してみた

Xcodeでのユニットテストの存在は知っていたものの使ったことがなかったので、簡単なものを試してみました。

確認したバージョン
Xcode 4.3.3

自分の今のところのイメージでは、データベースアクセスとかそのあたりのロジックのテストが出来ればいいなと思っているので、
前に書いたiOSでSQLiteを使う - おかひろの雑記のデータベースアクセス処理をテストするサンプルを作ってみました。

プロジェクトでユニットテストを使う設定になっていない場合はこちらで設定できます。
"Include Unit Tests"をチェックし忘れたプロジェクトにUnitTestの設定をする - おかひろの雑記

テスト対象の、データベースアクセスを行う処理はDatabaseUtilクラスにまとめてあるので、専用のテストクラスを作成します。
Objective-c test case class」を選択します。

クラス名を入力します。

テストのためのターゲットにチェックがついていることを確認します。

テストクラスができたので、テストメソッドをDatabaseUtilTests.mにうちこみます。

- (void)setUp
{
    [super setUp];
    
    // Set-up code here.
}

- (void)tearDown
{
    // Tear-down code here.
    
    [super tearDown];
}

// selectDataメソッドのテスト
- (void)testSelectData
{
    NSDictionary *data = [DatabaseUtil selectData:50];
	NSNumber *id1 = [data objectForKey:@"id1"];
	NSString *name = [data objectForKey:@"name1"];
	NSNumber *cnt = [data objectForKey:@"cnt"];
	//NSLog(@"name : %@",name);
	STAssertEqualObjects([NSNumber numberWithInt:50], id1,@"id1が違う");
	STAssertEqualObjects(@"Aデータ50",name ,@"name1が違う");
	STAssertEqualObjects([NSNumber numberWithInt:3],cnt, @"cntが違う");
}

// selectListメソッドのテスト
-(void)testSelectList
{
	NSArray *array = [DatabaseUtil selectList];
	
	STAssertEquals((NSUInteger)1000, [array count],@"件数が違う");
}

ちょっと試しただけですが、注意点というかルールというか。

  • テストメソッドの名前はtestXXXとする
  • NSStringも含め、オブジェクトの比較はSTAssertEqualObjectsを使う
  • STAssertXXXでの型の比較が厳密(?)


実行するときは「Test」で実行します。「Test」になっていない場合は、丸い部分を長押しすると変えることができます。

テストに失敗するとこんな感じになります。

成功すると「Test Succeeded」と表示されます。