У меня есть класс, который является своего рода оберткой для NSOperationQueue
. Он позволяет вставлять сетевые запросы с использованием блоков. В настоящее время запросы выполняются один за другим, но это может быть изменено в будущем.Единичные тесты для NSOperationQueue с maxConcurrentOperationCount
Вот код класса 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
, но documentation говорит, что я не должен полагаться на него. Как я могу это достичь?
EDIT: Мои тесты используют следующую схему:
@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.
Можете ли вы опубликовать свой модульный метод тестирования? – Greg
Я добавил один из моих модульных методов тестирования. –