私はiPhoneアプリの簡単なOCUnitテストで試していましたが、そのアプリデリゲートが期待していたクラスのインスタンスであると主張したかっただけです。私はこのテストが非常に有用であるとは思っていませんでしたが、私がObjective Cについて誤解を示していることが判明しました。isKindOfClassとNSStringFromClassはUIApplicationDelegateについて同意していません
まず、デリゲートへの参照を取得します。その後、戻ってくるもののクラス名を記録します。私の場合、出力には「アプリデリゲートのクラス名はCalculatorAppDelegateです」と正しく表示されます。
しかし、次の行のアサーションは失敗し、なぜ私は理解できません。
NSStringFromClassを(引き起こす可能性がどのような状況- (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");
}
)isKindOfClassはfalseを返しながら、正しいクラス名を返すには?それは助けるが、そのAをするかどう
NSLog(@"is it member? %i", [appDelegate isMemberOfClass:[CalculatorAppDelegate class]]);
わからない:操作の戻り値は
NSLog(@"is it kind? %i", [appDelegate isKindOfClass:[CalculatorAppDelegate class]]);
と、あなたもその場合メンバーをテストすることができますいただきました!
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).
私はこのプロジェクトをXCode4で新しく作成し、私のためにユニットテストターゲットを自動的にセットアップしました。私は完全に動作している多くのアサーションでかなりのテストをしています。失敗したのはこの1つの主張だけです。私の目標が正しく設定されていない場合もありますか?CalculatorTestingターゲットがないようですので、上記のアサーションはデバイスで実行する必要があるアプリケーションテストと呼ばれるものでしょうか?関連するノートでは、あなたがリンクしたページの指示は、XCode 4がどのようにターゲットを設定するかとは関係ありません。 4でターゲットを作る方法に関するヒント? – pohl
あなたの目標を正しく設定していないことは確かです。私はXcode 4でも作業しており、問題をテストしました。 Xcode 4では、プロジェクトの概要で通常のアプリケーションターゲットを選択し、それを複製する必要があります(Cmd-D)。 CalculatorTestingという名前を付けて、OCUnitテストターゲットを依存関係として追加します。アクティブなスキームを新しいターゲットに設定し、このスキームを編集します。左のテストを選択し、そこにテストバンドルを追加します。これでCmd-Uでアプリケーションテストを実行できます。 – Felix
時間を貸していただきありがとうございます。私のスキームを編集し、Testセクションの下を見ると、私のCalculatorTestsバンドルが正しくリストされているのが分かり、私が定義したテストクラスとメソッドが表示されます。明確にするために:私はすでにCmd-Uで単体テストを実行することができます。私は合計38のアサーションを含む11のテストメソッドを持っていますが、これらはすべて正常に動作します。私が正しく設定されたテストターゲットを持っていなかった場合、自分の質問に貼り付けたNSLog()メッセージが実行された可能性もありますか? – pohl