質問

私はiPhoneアプリのシンプルなOCUNITテストでプレイしていましたが、アプリの代表者が私が期待していたクラスのインスタンスであると主張したかっただけです。このテストが非常に便利であるとは思っていませんでしたが、客観的Cについて私が持っていることを誤解していることがわかりました。

最初に代表者への参照を取得します。次に、戻ってくるもののクラス名を記録します。私の場合、出力は「App Delegateのクラス名は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は虚偽を返しますか?

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).
役に立ちましたか?

解決

テストターゲットを正しく構成していません。あなたがフォローしている場合 ユニットテストアプリケーションのためのこのガイド 3つのターゲットが必要です。 電卓, calculatortestscalculatortesting。 「ビルドフェーズ」セクションを確認してください calculatortests. 。 「コンパイルソース」でのみ Sentestcase ソースファイルはそこにリストする必要があります。追加したと思います CalculatorAppdelegate.M そこにある他のファイル - これにより、同じソースファイルのアセンブリが重複し、その後、同じアプリケーションにリンクされます。 calculatortesting 目標。それはあなたの主張が失敗する理由を説明しています。

編集: あなたが必要ないことに気づきました calculatortesting Xcode 4のターゲット。プロジェクト>編集スキームに移動してください...そして、ユニットテストバンドルがにリストされていることを確認してください テスト セクション。その後、CMD-Uでユニットテストを実行できます。

他のヒント

操作の返品値をログアウトしてみてください

NSLog(@"is it kind? %i", [appDelegate isKindOfClass:[CalculatorAppDelegate class]]);

また、メンバーのかどうかをテストすることもできます。

NSLog(@"is it member? %i", [appDelegate isMemberOfClass:[CalculatorAppDelegate class]]);

それが役立つかどうかはわかりませんが、その出発点

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top