【发布时间】:2014-02-28 06:39:25
【问题描述】:
我正在尝试对 unwind segue 进行单元测试。
但似乎在测试中调用performSegueWithIdentifier: 方法不会执行展开转场,而它对其他类型的转场(例如Push 和 Modal segues。
基本上我想做的是以下几点:
- 从情节提要中获取视图控制器。
-
使用这行代码以编程方式执行展开转场:
[vc performSegueWithIdentifier:@"unwind" sender:vc];(我尝试将发件人更改为
nil和vc.button,这是展开segue的触发按钮。但测试仍然失败。) -
用这行代码检查视图控制器中的
seguePerformed属性是否设置为YES:XCTAssertTrue(sut.seguePerfomed, @"should be true.");在这个视图控制器的
- prepareForSegue:方法中,我使用segue 的标识符来标识展开segue。如果是展开转场,则将视图控制器的 seguePerformed 属性设置为 YES。
我认为我的performSegue 代码有问题。
但是,如果我将此行 [vc performSegueWithIdentifier:@"unwind" sender:vc]; 复制到我的视图控制器的 viewDidAppear 方法中进行测试,然后在 iPhone 模拟器中输入此视图。进入后它确实会返回到之前的视图。
对不起,我忘了提到我还尝试了以下sn-p:
- (void)testPerformingSegueShouldSetSeguePerform
{
// given
UINavigationController *nvVC = [sut.storyboard instantiateViewControllerWithIdentifier:@"nvVC"];
[nvVC pushViewController:sut animated:NO];
sut = (NTDSubViewController *)nvVC.topViewController;
// when
[sut performSegueWithIdentifier:@"unwind" sender:sut.button];
// then
XCTAssertTrue(sut.seguePerfomed, @"should be true.");
}
【问题讨论】:
-
我试图断言 NavigationController 状态的变化。奇怪的是,
viewControllers计数没有改变,topViewController也没有改变。即使在模拟器中,要立即看到目标 VC 中的这些变化也需要不止一次的 unwind 调用。虽然不知道缺少什么。你有运气吗?
标签: ios unit-testing segue