я сделал приложение для iOS, используя XCode 5, и теперь я хочу провести для него модульное тестирование, я написал тестовый пример для службы входа в систему, но дело в том, что запрос формируется правильно, но ответ не приходит, и когда мы запускаем приложение нормально мы получаем надлежащий ответ, я протестировал тот же сервис с OCUnit и не столкнулся с проблемами. есть ли какие-то конкретные вещи, о которых мы должны позаботиться при тестировании веб-сервисов с помощью XCTest
xcode 5 xctest тестирование асинхронного входа в веб-службу
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
Здесь я использовал версию цикла while, но если вы чем-то похожи на меня и ненавидите циклы while всем сердцем, вы знаете, как это сделать с помощью for one :) (Если вы этого не сделали: for(; ожидание для блока;){...} )
- person GiovaMaster; 16.05.2014