如何测试视图控制器是否已呈现?

时间:2017-02-13 22:13:02

标签: ios swift

我正在尝试编写单元测试,一旦选择了行,就会显示视图控制器。单元格声明不起作用,因为由于某种原因,您无法在tableview上调用didSelectRow。另外,我得到一个错误,表示VC是零:

func testDidSelectNewsReportCalledWhenNewsReportSelected() {
    var cell = tableView.didSelectRow(at: IndexPath(row: 0, section: 3), animated: false) //This line doesn't work

   let presentedVC = controller.presentedViewController?.view
    let newsReportVC = UIStoryboard(name:"News", bundle: Bundle.init(for: NewsViewController.self)).instantiateViewController(withIdentifier: "NewsReport") as! NewsReportViewController
    XCTAssertEqual(newsReportVC, presentedVC)
}

感谢。

1 个答案:

答案 0 :(得分:1)

为了对此进行测试,您必须查看演示文稿堆栈(如果您正在呈现视图控制器)或导航堆栈(如果您使用的是导航控制器。

此外,以编程方式选择表视图索引路径将使其调用它的委托的didSelectRow方法。

不要费心测试以查看选择特定行是否导致委托的didSelect方法被调用。相信Apple正确实现了他们的代码。您需要测试的只是表视图具有正确的委托,并且当调用didSelect时,它会做正确的事。

也就是说,测试视图控制器操作,特别是呈现和解散或推送和弹出是众所周知的困难和非常缓慢。不要这样做。尽可能多地将代码移动到模型层中,然后测试模型。