ios - 使用 OCMockito 测试 Storyboard的最佳方式

标签 ios objective-c ocmockito

我正在尝试测试基于 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/

相关文章:

ios TDD 与 Kiwi、OCHamcrest 和 OCMockiti,它们可以混合使用吗?

ios - 使用 OCMockito 验证 init* 中的方法调用

ios - 如何在 Swift 中弹出特定的 View Controller

iphone - 在 Xcode 中查看 Cocoa 实现文件

ios - 方法在巨大延迟后更新 UI

iphone - 向上滚动时使 UIScrollView 中的 UIView 保持在顶部

ios - 如何在 Objective-c 中使用元编程

objective-c - 使用 dispatch_async 调用测试代码

ios - 从右到左滚动背景 Swift/Sprite 套件

ios - 无法使用 prepare for segue 方法执行 segue