나는 일종의 래퍼 인 클래스가 NSOperationQueue
있습니다. 블록을 사용하여 네트워크 요청을 대기열에 넣을 수 있습니다. 현재 요청은 차례로 실행되지만 나중에 변경할 수 있습니다.
다음은 MyRequestsQueue 클래스의 코드입니다.
@interface MyRequestsQueue ()
@property(nonatomic, strong) NSOperationQueue* queue;
@end
@implementation MyRequestsQueue
-(instancetype)init
{
self = [super init];
if(!self) {
return nil;
}
self.queue = [[NSOperationQueue new] autorelease];
self.queue.maxConcurrentOperationCount = 1;
return self;
}
-(void)addRequestBlock:(void (^)())request
{
NSBlockOperation* operation = [NSBlockOperation blockOperationWithBlock:request];
[self.queue addOperation:operation];
}
@end
일반적으로 XCTest를 사용하여 비동기 코드를 단위 테스트하는 방법을 알고 있습니다. 하지만 이제 MyRequestsQueue
큐가 한 번에 하나의 작업 만 실행하는지 확인 하는 단위 테스트를 추가하고 싶습니다 . 또는 현재 실행중인 작업 수가보다 크지 않은지 테스트하는 것이 더 좋습니다 maxConcurrentOperationCount
. 의 operationCount
속성 을 관찰하려고 self.queue
했지만 문서에 의존해서는 안된다고 나와 있습니다. 어떻게 할 수 있습니까?
편집 : 내 테스트는 다음 패턴을 사용합니다.
@interface MessageRequestQueueTest : XCTestCase
@property(nonatomic, strong) MessageRequestsQueue* reuqestQueue;
@property(nonatomic, assign) NSInteger finishedRequestsCounter;
@end
// setUp method ommited - simply initializes self.requestQueue
-(void)testAddedRequestIsExecuted
{
[self.reuqestQueue.queue setSuspended:YES];
__weak __typeof(self) weakSelf = self;
[self.reuqestQueue addRequestBlock:^{
++weakSelf.finishedRequestsCounter;
} withName:kDummyRequestName];
[self.reuqestQueue.queue setSuspended:NO];
WAIT_WHILE(0 == self.finishedRequestsCounter, 0.1);
XCTAssertEqual(self.finishedRequestsCounter, 1, @"request should be executed");
}
WAIT_WHILE 매크로는 AGAsyncTestHelper 입니다.
나는 당신의 테스트 전략을 다시 생각하는 것이 좋습니다.
하지만 이제 큐가 한 번에 하나의 작업 만 실행하는지 확인하는 MyRequestsQueue에 대한 단위 테스트를 추가하고 싶습니다. 또는 더 나은 방법-현재 실행중인 작업 수가 maxConcurrentOperationCount보다 크지 않은지 테스트합니다.
이 두 테스트는 모두 Apple의 구현을 테스트 NSOperationQueue
하는 것이며, 이는 아무것도 얻지 못할 것입니다. 자신이 소유하지 않은 단위 테스트 코드가되고 싶지는 않으며 일반적으로 Apple이 자체 코드를 올바르게 테스트했다고 가정해야합니다. NSOperationQueue
동시 작업을 더 많이 실행 한다면 애플은 큰 문제가 될 것입니다!
대신에, 나는 단순히 초기화 됐어요 후, 당신이 있는지 테스트 할 MyRequestsQueue
올바른 설정 한 maxConcurrentOperationCount
자신에를 NSOperationQueue
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다