2013-03-01 7 views
12

関数がisKindOfClassを呼び出すメソッドにOCMockオブジェクトを渡します。しかし、単体テストの場合、返される値は模擬クラスではなくOCMockObjectです。OCMockオブジェクトのisKindOfClassを呼び出すときに疑似値を取得する方法は?

+1

OCMockObjectは、そのフレームワークの基本クラスのようです。あなたは+(id)を呼び出していますか?mockForClass:クラスと、作成されたオブジェクトが擬似クラスとして自分自身を報告していない理由が不思議ですか? – JiuJitsuCoder

+0

この問題が解決しない場合は、ユースケースを提示できますか?あなたは何をしようとしているのですか?いくつかのコードは分析を助けるでしょう。 –

+0

パラメータのクラスに応じてオブジェクトを作成するすべてのファクトリクラスに役立ちます。私の場合は、これらの工場をテストするために模擬の代わりに実際のオブジェクトを作成する必要があります。 – Giuseppe

答えて

0

関数がisKindOfClassを呼び出すメソッドにOCMockオブジェクトを渡す場合、部分模擬を作成する必要があります。次のコードはあなたを助けるかもしれません。それは私のために働いた。

-(void)testMyTest 
{ 
    FirstViewController* masterVC = [[FirstViewController alloc]init]; 
    SecondViewController *second = [[SecondViewController alloc] init]; 
    id master = [OCMockObject partialMockForObject:second]; 
    [[master expect] getName:@"PARAM"]; 
    [masterVC doSomething:master]; 
    [master verify]; 

    [masterVC release]; 
    [second release]; 
} 

FirstViewController

-(void)doSomething:(SecondViewController *)detail 
{ 
    if ([detail isKindOfClass:[SecondViewController class]]) 
    { 
     NSString * returnVal = [detail getName:@"PARAM"]; 
     NSLog(@"returnVal %@",returnVal); 
    } 
} 

内部doSomethingの方法もう一つの選択肢は、isKindOfClass方法をからかっているので、テストケースはここで

- (void)testMyTest 
{ 
    CalculatorViewController* masterVC = [[CalculatorViewController alloc]init]; 
    id master = [OCMockObject niceMockForClass:[SecondViewController class]]; 
    BOOL ret = YES; 
    [[[master expect] andReturnValue:OCMOCK_VALUE(ret)] isKindOfClass:[SecondViewController class]]; 
    [[master expect] getName:@"PARAM"]; 
    [masterVC doSomething:master]; 
    [master verify]; 
} 
+0

mock/niceMockを使用する利点は、オブジェクトをインスタンス化する必要がないことです。私の場合、そのオブジェクトを作成するのは難しいです。 – Giuseppe

+0

ok。 1つの方法は、isKindOfClassメソッドをモックすることです。次のようなものですid master = [OCMockObject niceMockForClass:[SecondViewController class]]; BOOL ret = YES; //値を変更することができます [[[期待値]と[戻り値]:OCMOCK_VALUE(ret)] isKindOfClass:[SecondViewControllerクラス]]; –

+0

私がやっているのは、niceMockを使って、メソッド "class"をスタブして、模擬クラスを返すことです。 kindOfClassに対してYESを返すだけで、信頼性が向上します。なぜこれがOCMockのデフォルトの動作ではないかは私にとっては不明です。 – Giuseppe

関連する問題