XCTests для SLComposeViewController
Я пытался написать блок-тесты с использованием XCTest для SLComposeViewController и не смог найти никакого решения до сих пор. Любое предложение с точки зрения подхода и кода было бы полезно.
Моя цель - протестировать приведенный ниже код с помощью XCTest
SLComposeViewController *tweetSheet = [SLComposeViewController
composeViewControllerForServiceType:SLServiceTypeTwitter];
SLComposeViewControllerCompletionHandler __block completionHandler = ^(SLComposeViewControllerResult result)
{
[tweetSheet dismissViewControllerAnimated:YES completion:nil];
switch(result)
{
case SLComposeViewControllerResultCancelled:
{
[self showAlertWithTitle:nil
andMsg:NSLocalizedString(@"Sharing failed", @"Workout summary text")];
}
break;
case SLComposeViewControllerResultDone:
{
[self showAlertWithTitle:NSLocalizedString(@"Success", @"Success")
andMsg:NSLocalizedString(@"Message shared", @"Workout summary share text")];
}
break;
}
};
1 ответ
Если вы хотите выполнить асинхронный тест, вы создаете объект "ожидание", объект, который устанавливает ожидание того, что некоторая асинхронная задача будет выполнена в более поздний момент времени. Затем в своем блоке завершения асинхронных задач вы выполняете это ожидание. Наконец, вернувшись в основную очередь, после запуска асинхронной задачи вы ожидаете, что это ожидание будет выполнено.
Таким образом, объединяя все это, асинхронный тест будет выглядеть так:
- (void)testSomethingAsynchronous
{
XCTestExpectation *expectation = [self expectationWithDescription:@"some description"];
[self doSomethingAsynchronousWithCompletionHandler:^{
// do whatever tests you want
// when all done, fulfill the expectation
[expectation fulfill];
}];
[self waitForExpectationsWithTimeout:30.0 handler:nil];
}