У меня есть IBAction на мой взгляд, контроллер, который выглядит как этотIOS TestCase для метода, который включает в себя NS Таймер
-(IBAction)signUpAction:(id)sender
{
AppDelegate *appDel = [[UIApplication sharedApplication]delegate];
//check for internet Connection
if(appDel.isReachable)
{
//Internet Connection available
//perform animation od buttons and imagie view
[self fallDownAnimation];
//after animation perform model segue to corresponding view controller
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:0.8f target:self selector:@selector(performRegistrationPageSegue) userInfo:nil repeats:NO];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
}
else
{
//No internet Connection
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:ALERT_VIEW_TITLE message:@"No Internet Connection" delegate:self cancelButtonTitle:nil otherButtonTitles:@"Okay", nil];
[alert show];
}
}
-(void)performRegistrationPageSegue{
[self performSegueWithIdentifier:@"registerVCSegue" sender:self];
}
Я хочу, чтобы написать тест по методу signUpAction и проверить, если выполняется Segue. Так как у него есть таймер, тестовый сценарий, который я написал, терпит неудачу. мне нужен способ, чтобы проверить следующее условие
Мой текущий метод TestCase является
-(void)testRegisterViewControllerSegueOnAvailableInternetConnection{
AppDelegate *appDel = [[UIApplication sharedApplication]delegate];
appDel.isReachable = YES;
id loginMock = [OCMockObject partialMockForObject:_initialViewControllerToTest];
[[loginMock expect] performSegueWithIdentifier:@"registerVCSegue" sender:[OCMArg any]];
[loginMock performSelectorOnMainThread:@selector(signUpAction:) withObject:_initialViewControllerToTest.signUpButton waitUntilDone:YES];
XCTAssert([loginMock verify],@"Segue to Register Page not Performed on Sign Up Click");
}
Как я могу использовать эту логику относительно моего кода ? :( –
Вы просто вставляете метод в тестовый файл и вызываете его после добавления NSTimer в цикл событий. Просто начните с вызова waitFor, пока не поймете, как все работает. Метод waitUntilTrue позволяет быстрее вернуться в случае где известный селектор вернет true в результате некоторого асинхронного состояния. – MoDJ
Kool. Понял, как он работает. Спасибо тонну :) –