1

我正在尝试基于情节提要测试应用程序。该场景是一个导航控制器,里面有一个视图控制器。测试是执行 segue 将视图控制器设置为目标控制器(push 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:

4

1 回答 1

2

谁打电话-prepareForSegue:sender:?UIKit 可以。通过尝试测试它,您正在测试 UIKit——这是不必要的。当处理一个框架(即,回调给你的东西)时,基本模式是:

  • 确保您正确调用了框架。
  • 假设框架正确回调。通过让您的测试直接调用框架将调用的方法来假装发生这种情况。
于 2014-06-09T03:25:47.780 回答