【发布时间】:2016-11-20 11:05:10
【问题描述】:
我尝试设置一个路由器来导航到正确的 Viewcontroller。当我在模拟器中调用它时,它确实工作正常。
但是:当我尝试通过我的 NavigationController 的 topViewController 或 presentViewController 属性测试此转换的结果时,我总是得到每个 Viewcontroller,但不是正确的。
我的方法如下所示:
func navigateToViewController(_ viewController: UIViewController, animated: Bool) {
self.pushViewController(viewController, animated: animated)
}
正如我所说。它在模拟器中运行良好,但我想对其进行测试。每次我调用它时,ViewController 都已正确设置。但是Test的结果是完全不同的Controller。
当我断言 topViewController 或 presentViewController 应该是 HomeViewController 时,我总是得到不同的 ViewController 作为结果。
XCTAssertTrue(self.sut.topViewController is HomeViewController,
"The TopViewController should be set to the HomeViewController but instead: \(self.sut.topViewController)")
这怎么可能,我该如何解决?
【问题讨论】:
-
你想要单元测试还是 UI 测试?
-
这应该是我路由器的单元测试。这样一切都是正确的,包括呈现的 ViewController。
-
看起来你的类是 NavigationController 的子类或扩展。你能多分享一点它的界面吗?
-
不。控制器的实例是相同的。这就是为什么我不明白为什么它不起作用。在 NavigationViewController 中无非是一个基于 String 的 switch 来准备 ViewController,它将被传递给 "navigateToViewController" 方法。
-
这里我有一个示例项目,其中仅包含出现问题的部分。希望有人可以帮助我解决这个问题。 github.com/Evil-Me/SegueUnitTestApp
标签: ios swift unit-testing uinavigationcontroller xctest