xcode 5 xctest тестирование асинхронного входа в веб-службу

я сделал приложение для iOS, используя XCode 5, и теперь я хочу провести для него модульное тестирование, я написал тестовый пример для службы входа в систему, но дело в том, что запрос формируется правильно, но ответ не приходит, и когда мы запускаем приложение нормально мы получаем надлежащий ответ, я протестировал тот же сервис с OCUnit и не столкнулся с проблемами. есть ли какие-то конкретные вещи, о которых мы должны позаботиться при тестировании веб-сервисов с помощью XCTest


person Angular UI Dev    schedule 27.01.2014    source источник
comment
Если вы не предоставите код, вряд ли кто-то сможет вам помочь.   -  person nKn    schedule 27.01.2014
comment
загляните сюда... это может быть полезно bignerdranch.com/blog /асинхронное тестирование-с-xcode-6   -  person Hardik Darji    schedule 11.11.2016


Ответы (2)


С помощью https://github.com/hfossli/AGAsyncTestHelper вы можете написать

- (void)testAsyncBlockCallback
{
    __block BOOL jobDone = NO;

    [Manager doSomeOperationOnDone:^(id data) {
        jobDone = YES; 
    }];

    WAIT_WHILE(!jobDone, 2.0);
}
person hfossli    schedule 03.03.2014

Макрос hfossli хорош, но не добавляет входные данные в цикл выполнения, что делает его немедленный возврат (насколько я понимаю этот код вызывает проблемы с ЦП), здесь код для исправления Это:

NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];

wile(waitingForBlock){

    [runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1f]];
}

простой простой полный пример использования с гипотетическим вызовом AFNetworking:

- (void)testSync{

    __block BOOL waitingForBlock = YES;

    [self.manager POST:k_WSERVICE_SYNC_ENDPOINT
            parameters:nil
               success:^(AFHTTPRequestOperation *operation, id responseObject) {

                XCTAssertTrue(responseObject != nil, @"Sync: Got empty response, should have received something");
                waitingForBlock = NO;

          } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

                XCTFail(@"Sync: Failed to connet with error %@",error);
                waitingForBlock = NO;
          }];


    NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
    [runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];

    while(waitingForBlock){

        [runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1f]];
    }
}
person GiovaMaster    schedule 16.05.2014
comment
Здесь я использовал версию цикла while, но если вы чем-то похожи на меня и ненавидите циклы while всем сердцем, вы знаете, как это сделать с помощью for one :) (Если вы этого не сделали: for(; ожидание для блока;){...} ) - person GiovaMaster; 16.05.2014