2009-12-31 3 views
1

NSURLConnection에서 상속받은 클래스의 사용자 정의 init 메소드를 유닛 테스트하고 싶습니다. 테스트 가능한 클래스의 init이 NSURLConnection's initWithRequest을 호출하면 어떻게합니까?iphone OCMockObject 및 NSURLConnection에서 상속하는 클래스를 단위 테스트하기

저는 OCMock을 사용하고 있으며 일반적으로 테스트 클래스에 포함 된 객체를 모의 할 수 있습니다. 이 상속 시나리오에서이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

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

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

내 클래스는 다음과 같이 구현됩니다

OCMockObject가 [NSURLRequest] : 예기치 않은 메소드가 호출 : _CFURLRequest

답변

0

여기

@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; 
} 

은 내가 오류입니다 래퍼가 진짜를 부르고 있습니다 : [super i nitWithRequest ...], NSURLRequest가 기대치를 설정하지 않은 _CFURLRequest 메소드를 호출하고 있습니다. 래퍼를 만들고 있기 때문에 NSURLConnection을 "모의 (mock)"하지 않고 "스텁 (stub)"합니다. 그리고 당신은 아마 진짜 물건을 사용하고 싶지 않을 것입니다. 래퍼가 테스트중인 유닛이 호출하고 그 내부에 어설 션을 수행하는 메소드를 구현할 수 있습니다. NSURLConnection에서 OCMockObject를 만들지 않으므로 verify 메소드를 사용할 수 없습니다.

아직 NSURLConnection을 조롱하는 방법이 없기 때문에 Objective-C를 조롱 할 때 나는 새로운 편입니다. 당신이 mockForClassniceMockForClass로 변경하는 경우

1

, 당신은 자동으로 당신이 걱정하지 않는 메시지를 무시합니다 스텁 객체를 얻을 수 있습니다,하지만 당신은 여전히 ​​대해 당신이 상관이야 통화에 대한 기대 설정할 수 있습니다

id urlRequest = [OCMockObject niceMockForClass:[NSURLRequest class]];