Ios 如何测试视图控制器是否已显示?

Ios 如何测试视图控制器是否已显示?,ios,swift,Ios,Swift,我正在尝试编写一个单元测试,在选中一行后,将显示一个视图控制器。单元格声明不起作用,因为由于某些原因,无法在tableview上调用didSelectRow。此外,我还得到一个错误,PresentDVC为零: func testDidSelectNewsReportCalledWhenNewsReportSelected() { var cell = tableView.didSelectRow(at: IndexPath(row: 0, section: 3), animated: f

我正在尝试编写一个单元测试,在选中一行后,将显示一个视图控制器。单元格声明不起作用,因为由于某些原因,无法在tableview上调用didSelectRow。此外,我还得到一个错误,PresentDVC为零:

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)
}

谢谢。

为了测试这一点,您必须查看演示堆栈(如果您演示的是视图控制器)或导航堆栈(如果您使用的是导航控制器)

另外,以编程方式选择表视图索引路径不会导致它调用其委托的didSelectRow方法

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


也就是说,测试视图控制器的操作,特别是显示和取消或推送和弹出是出了名的困难和非常缓慢。不要这样做。将尽可能多的代码移到模型层,只需测试模型即可。

设置tableView.delegate=self,并检查此线程如何实现didSelectRow,您正在这样做错。