테스트 중에 사용할 mock을 만들기 위해 서브 클래스를 AFHTTPSessionManager
으로했습니다. 그러나 AFURLRequestSerialization
의 init
메소드에서 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
방법과 관련이 있을까요?