2015-01-31 3 views
0

테스트 중에 사용할 mock을 만들기 위해 서브 클래스를 AFHTTPSessionManager으로했습니다. 그러나 AFURLRequestSerializationinit 메소드에서 BAD_ACCESS 오류가 계속 발생합니다 (모의 경우에만 해당). 여기 설치는 다음과 같습니다AFNetworking 2.0 : AFURLRequestSerialization 초기화에서 TDD 오류를 일으키는 AFHTTPSessionManager를 서브 클래스 화

테스트 클래스 :

@interface PLBookCommunicatorTests : XCTestCase 
@end 

@implementation PLBookCommunicatorTests 
{ 
    MockAFHTTPSessionManager *httpSessionManager; 
    HKCommunicator *communicator; 
} 

- (void)setUp 
{ 
    [super setUp]; 

    httpSessionManager = [[MockAFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://base.url"]]; 

    communicator = [[HKCommunicator alloc] initWithHttpSessionManager:httpSessionManager]; 
} 

MockAFHTTPSessionMannager.h

#import "AFHTTPSessionManager.h" 

@interface MockAFHTTPSessionManager : AFHTTPSessionManager 

@property (nonatomic, assign) BOOL successful; 

@end 

MockAFHTTPSessionManager.m

import <AFNetworking.h> 
#import "MockAFHTTPSessionManager.h" 

@implementation MockAFHTTPSessionManager 

- (NSURLSessionDataTask *)GET:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSURLSessionDataTask *, id))success failure:(void (^)(NSURLSessionDataTask *, NSError *))failure 
{ 
    if(self.successful) 
    { 
     success(nil, nil); 
    } 
    else 
    { 
     failure(nil, nil); 
    } 

    return nil; 
} 

@end 

내가 AFURLRequestSerialization 년대의이 부분에서 오류로 실행 초기화 방법 :

self.mutableObservedChangedKeyPaths = [NSMutableSet set]; 
for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) { 
    if ([self respondsToSelector:NSSelectorFromString(keyPath)]) { 
     [self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew  context:AFHTTPRequestSerializerObserverContext]; 
    } 
} 

특히, [self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:AFHTTPRequestSerializerObserverContext]; 라인. 그것은 그 첫 번째 실행을 잡는다 for 루프

나는 왜 그 줄이 내 모의 동물에만 붙잡는 지 이해하지 못한다. AFHTTPSessionManager을 서브 클래 싱하는 동안 내가 빠진 것이 있습니까? 아마도 addObserver 방법과 관련이 있을까요?

답변