2013-06-12 1 views
0

Мне нужно написать единичный тест, который проверяет, что нажатие кнопки приведет к вызову нужного IBAction.Как написать единичный тест, который проверяет, что нажатие кнопки приведет к вызову надлежащего IBAction?

Вот мой метод испытания:

- (void)testWhether_loginBtnTapped_IsCalledAfterUserTapLoginButton 
{ 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    GoingToLoginViewController *myViewController = [storyboard instantiateViewControllerWithIdentifier:@"GoingToLoginVC"]; 

    id vcMock = [OCMockObject partialMockForObject:myViewController]; 

    [[vcMock expect] loginBtnTapped:[OCMArg any]]; 

    [myViewController.loginBtn sendActionsForControlEvents:UIControlEventTouchUpInside]; 

    [vcMock verify]; 
} 

Когда я запускаю тест у меня есть журнал сообщение:

error: testWhether_loginBtnTapped_IsCalledAfterUserTapLoginButton (Ticket2Tests) failed: OCPartialMockObject[GoingToLoginViewController]: expected method was not invoked: loginBtnTapped:<OCMAnyConstraint: 0xfd3aeb0> 

И когда я бегу мое приложение на тренажере кнопка работает надлежащим образом и - (IBAction)loginBtnTapped:(id)sender; был называется.

Что я сделал не так, и что мне делать, чтобы пройти тест?

+0

Пожалуйста, взгляните на этот вопрос: [Как вы проверите свои графические интерфейсы Cocoa?] (Http://stackoverflow.com/questions/545768/how-do-you-test-your-cocoa-guis). Ответ вполне применим для Cocoa Touch. Вы можете проверить фактическое взаимодействие с тестами UI, например, [Keep It Functional (KIF)] (https://github.com/square/KIF). – mAu

ответ

2

Я подозреваю, что myViewController.loginBtn - это нуль, так как вы не загрузили представление. Попробуйте позвонить [myViewController view], чтобы вызвать загрузку первого изображения.

+0

Спасибо Кристофер Пикслей). Теперь я добавил '[myViewController view];' после 'GoingToLoginViewController * myViewController = [storyboard instantiateViewControllerWithIdentifier: @" GoingToLoginVC "];' и мой тест пройдет с успехом. Также я имею изменение '[[vcMock ожидать] loginBtnTapped: [OCMArg any]];' to '[[vcMock ожидать] loginBtnTapped: myViewController.loginBtn];' для большей точности –