如何在XCTest中覆盖tableview委托

时间:2016-05-03 13:27:45

标签: ios swift uitableview delegates xctestcase

如何为此成功编写测试用例"成功"场景?

if ([tblView.delegate respondsToSelector:@selector(tableView:viewForHeaderInSection:)]) {
         ...
}else{
         ...
}

我试过在swift中创建下面的模拟委托:

class MockTableViewDelegate:NSObject, UITableViewDelegate {

  @objc func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
            return 30
        }

        // MARK: Delegates
   @objc func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
            return UIView()
        }
}

代码:

mockTableView.delegate=MockTableViewDelegate()  
print("delegate===\(mockTableView.delegate)")

它打印为零。我为数据源尝试了相同的模型,它返回数据源obj。为什么委托回归为零?以及如何测试这种情况?

2 个答案:

答案 0 :(得分:1)

代表通常是弱引用。如果您首先将MockTableViewDelegate分配给局部变量,则在print中使用时,它应该仍然存在。请尝试以下方法:

let delegate = MockTableViewDelegate()
mockTableView.delegate = delegate
print("delegate===\(mockTableView.delegate)")
print(delegate)

需要第四行来保持第三行的对象生效。

答案 1 :(得分:0)

最后我发现这是iOS运行时中的一个错误。解决这个问题的一种方法是使用OCMock,但它不适用于Swift。所以我现在用Objective-c写的。

Promise