1

NSURLConnection から継承するクラスのカスタム init メソッドを単体テストしたい - テスト可能なクラスの init が呼び出す場合、どうすればよいNSURLConnection's initWithRequestですか?

私は OCMock を使用しており、通常、テスト クラスに含まれるオブジェクトをモックできます。この継承シナリオでは、これを行う最善の方法は何ですか?

- (void)testInit
{   
    id urlRequest = [OCMockObject mockForClass:[NSURLRequest class]];

    MyURLConnectionWrapper *conn = [[MyURLConnectionWrapper alloc] 
                    initWithRequest:urlRequest delegate:self 
                    someData:extraneousData];
}

私のクラスは次のように実装されています:

@interface MyURLConnectionWrapper : NSURLConnection {

}
- (id)initWithRequest:(NSURLRequest *)request 
             delegate:(id)delegate someData:(NSString *)fooData
@end

@implementation MyURLConnectionWrapper

- (id)initWithRequest:(NSURLRequest *)request 
             delegate:(id)delegate someData:(NSString *)fooData
{
    if (self = [super initWithRequest:request delegate:delegate]) 
    {
        // do some additional work here
    }

    return self;
}

エラーは次のとおりです。

OCMockObject[NSURLRequest]: 予期しないメソッドが呼び出されました: _CFURLRequest

4

2 に答える 2

1

に変更mockForClassするとniceMockForClass、気にしないメッセージを黙って無視するスタブオブジェクトが得られますが、気になる呼び出しの期待値を設定することはできます。

id urlRequest = [OCMockObject niceMockForClass:[NSURLRequest class]];
于 2010-07-08T20:18:06.420 に答える
0

あなたのラッパーは本物を呼び出しています: [super initWithRequest ...]、そして NSURLRequest は、期待値を設定していないメソッド _CFURLRequest を呼び出しています。ラッパーを作成しているため、NSURLConnection を「モック」ではなく「スタブ」しています。そして、おそらく実際のオブジェクトに関与したくないでしょう。ラッパーに、テスト対象のユニットが呼び出すメソッドを実装させ、その中でアサートを実行させることができます。NSURLConnection から OCMockObject を作成していないため、検証メソッドを使用できません。

私はObjective-Cでのモックはまだ初めてなので、NSURLConnectionをモックする方法はまだありません。

于 2010-02-02T21:31:48.207 に答える