使用OCMockito测试故事板的最佳方法

时间:2014-06-05 09:29:44

标签: ios objective-c ocmockito

我正在尝试基于故事板测试应用程序。该场景是一个内部带有View Controller的导航控制器。测试是执行segue将视图控制器设置为目标控制器(推送segue)。我正在使用OCMockito,这是我的测试:

MyViewController *mockSut = mock([MyViewController class]);
UINavigationController *nav = mock([UINavigationController class]);

[given(mockSut.navigationController) willReturn:nav];
[mockSut performSegueWithIdentifier:@"mySegue" sender:nil];

MKTArgumentCaptor *segueArgument = [[MKTArgumentCaptor alloc] init];
MKTArgumentCaptor *senderArgument = [[MKTArgumentCaptor alloc] init];

[verify(mockSut) prepareForSegue:[segueArgument capture] sender:[senderArgument capture]];
assertThat([[[segueArgument value] destinationViewController] class], equalTo([MyDestinationViewController class]));

但它抱怨没有调用prepareForSegue:方法。

这里有什么问题?也许performSegueWithIdentifier:以异步方式调用prepareForSegue:

1 个答案:

答案 0 :(得分:2)

谁致电-prepareForSegue:sender:? UIKit呢。通过尝试测试,您正在测试UIKit - 这是不必要的。在处理框架(即回调给你的东西)时,基本模式是:

  • 确保您正确调用框架。
  • 假设框架正确回调。通过让测试直接调用框架将调用的方法来假装发生这种情况。