调用实例方法“tableView”没有完全匹配

Posted

技术标签:

【中文标题】调用实例方法“tableView”没有完全匹配【英文标题】:No exact matches in call to instance method 'tableView 【发布时间】:2020-07-05 16:18:58 【问题描述】:

我只是想测试一个表格视图单元格选择。 我尝试过使用 tableView.selectRow(at:, animated:, scrollPosition:) 但从未调用过委托回调。

然后我尝试直接调用回调,这仍然是该类的普通方法,因此它应该可以使用,但我收到错误“在调用实例方法'tableView'时没有完全匹配” " 指向行的第 5 个字符

func testDidSelectIsCalled() 
    sut.tableView(sut.tableView , didSelectRowAt: IndexPath(row: 1, section: 0)) // Error
    presenter.verifyViewDidSelectWasCalled(times: 1)
  

有什么想法吗? 如何测试委托中的代码?

【问题讨论】:

【参考方案1】:

我假设您知道使用 UI 测试和单元测试来测试什么。

如果你在做 UI 测试,你可以测试你的 tableView 的静态文本。

但很可能您正在这里进行单元测试。在 UT 中,您应该测试尽可能小的单元,并且不要测试 UITableView 委托方法的 didSelect,因为 IMO 它不是您的代码,因此您不必担心。

话虽如此,请将您的方法从 didSelect 转换为新的不同方法,然后继续测试您的新方法。


编辑:我的意思是不要直接测试didSelect,因为它不是“你的代码”,你真的可以制作一个更好的方法,didSelect 方法可以调用,它也是苹果的一段代码.正如您在代码中看到的那样,您正在调用“UI”(或UIKit)的一段代码UITableView,具体而言,您不应该在单元测试中这样做。

【讨论】:

谢谢,但我不明白你为什么说 didSelect 不是我的代码。我在那里处理项目选择。所以它一定是我的代码,并且在 xcode 的代码覆盖工具中说该函数没有经过测试。所以我仍然有我最初的问题,仍然不知道为什么我不能直接调用委托方法: sut.tableView(sut.tableView , didSelectRowAt:) 我编辑了答案。不确定其他人对您问题的否决,我认为每个测试问题都应该对其他人有所帮助。所以也许尝试添加一点你的 UT 代码。

以上是关于调用实例方法“tableView”没有完全匹配的主要内容,如果未能解决你的问题,请参考以下文章

函数申明对函数模板实例化的屏蔽

在标头之间调用时,模板实例化无法匹配重载流运算符的参数列表

Python的实例方法,类方法,静态方法之间的区别及调用关系

Flutter:InternalLinkedHashMap'没有具有匹配参数的实例方法'cast'

实例方法'mapView(_:didFailToLocateUserWithError :)'几乎匹配可选要求

TypeScript 回调没有在其签名中完全实例化类