私は iPhone アプリの単純な OCUnit テストで遊んでいましたが、アプリのデリゲートが期待どおりのクラスのインスタンスであることを確認したかっただけです。このテストがあまり役立つとは思っていませんでしたが、Objective C に関する私の誤解が明らかになりました。
最初にデリゲートへの参照を取得します。次に、返されたクラス名をログに記録します。私の場合、出力には「アプリ デリゲートのクラス名は CalculatorAppDelegate です」と正しく表示されます。
しかし、次の行のアサーションが失敗し、その理由がわかりません。
- (void)testAppDelegate
{
id appDelegate = [[UIApplication sharedApplication] delegate];
NSLog(@"app delegate's class name is %@", NSStringFromClass([appDelegate class]));
NSLog(@"is it kind? %i", [appDelegate isKindOfClass:[CalculatorAppDelegate class]]);
NSLog(@"is it member? %i", [appDelegate isMemberOfClass:[CalculatorAppDelegate class]]);
NSLog(@"class == class %i", [appDelegate class] == [CalculatorAppDelegate class]);
STAssertTrue([appDelegate isKindOfClass:[CalculatorAppDelegate class]], @"wtf");
}
NSStringFromClass() が正しいクラス名を返し、isKindOfClass が false を返すのはどのような状況ですか?
2011-03-19 15:51:13.864 Calculator[40092:207] app delegate's class name is CalculatorAppDelegate
2011-03-19 15:51:13.864 Calculator[40092:207] is it kind? 0
2011-03-19 15:51:13.865 Calculator[40092:207] is it member? 0
2011-03-19 15:51:13.865 Calculator[40092:207] class == class 0
/Users/pohl/Developer/FoundationCalculator/CalculatorTests/CalculatorBrainTests.m:37: error: -[CalculatorBrainTests testAppDelegate] : "[appDelegate isKindOfClass:[CalculatorAppDelegate class]]" should be true. wtf
Test Case '-[CalculatorBrainTests testAppDelegate]' failed (0.002 seconds).