调用实例方法“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'