我正在尝试测试基于 Storyboard的应用程序。该场景是一个导航 Controller ,里面有一个 View Controller 。测试是执行 segue 将 View Controller 设置为目标 Controller (推送 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:
?
最佳答案
谁调用了 -prepareForSegue:sender:
? UIKit 可以。通过尝试测试它,您正在测试 UIKit——这是不必要的。在处理框架(即回调给你的东西)时,基本模式是:
- 确保您正确调用框架。
- 假设框架正确回调。通过让您的测试直接调用框架将调用的方法来假装这发生了。
关于ios - 使用 OCMockito 测试 Storyboard的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24056528/