单元测试— UITableView
向用户显示数据的最常见方式是使用某种无休止的表格,例如Instagram的feed,Facebook的时间轴,WhatsApp的消息等。
作为iOS开发人员,您有一些工具可以实现这一目标。 您可以使用UITableView
, UICollectionView
, IGListKit
等。 所有这些工具都有共同点,它们都使用委托/数据源模式,并具有用于显示数据的自定义视图。
在本文中,我将展示如何使用UITableView
测试集合的委托,数据源和视图。
数据源
首先,让我们创建一个新文件并从UITableViewDataSource
实现一些方法。 在此示例中,我们将使用默认的UITableViewCell
作为单元格,使用String
作为模型,但是可以随意使用所需的任何单元格和模型。
根据[String]?
我们的单元格将具有不同的标题[String]?
数据。
之后,让我们编写一些测试。 在每次测试之前,我们将创建一个[String]
来填充我们的表,创建一个MyDelegateDatasource
对象,将UITableViewCell
注册到我们的表中并设置其委托和数据源。
目前,我们有两项测试:
- 行数
- 节数
我们的行数应为5,并应包含1个部分。 cellForRow
方法将在以后进行测试。
代表
我们的代表有点不同,要测试它,我们需要对其进行模拟,一种简单的方法是创建一个协议。
每次用户选择一个单元格时,我们都将其称为该协议。 因此,现在我们可以更新MyDelegateDatasource
以具有MyDelegateDatasourceProtocol
对象,并在每次UITableViewDelegate
调用didSelectRow
时都调用它。 不要忘记实现UITableViewDelegate
didSelectRow
方法。
为了测试该委托,我们需要创建一个实现该协议的对象,换句话说,我们需要对其进行模拟。 我们将使用此对象检查在UITableViewDelegate
调用didSelectRow
时是否正在调用我们的委托。 这个模拟很简单,只需要在调用didSelectCell
方法时更改一个布尔值并保存接收到的参数即可。
让我们更新测试文件,创建一个MyDelegateDatasourceMock
对象并在MyDelegateDatasource
上设置委托属性。
我们的委托测试是在调用tableView(tableView, didSelectRowAt: indexPath)
之前检查didSelectCell
属性是否为false
之后是否将其更改为true
。 另外,我们正在验证收到的数据是否符合预期。
视图
我们的测试未涵盖cellForRow
方法。 为了检查UITableViewCell
是否按预期方式运行,我们使用了Nimble + Snapshot。 让我们添加一些测试来检查它们。
在我们的项目中,在自己的文件中实现委托和数据源将在测试时大有帮助,并使它们更易于编写和测试。
这是一系列文章的第4部分,展示了如何在iOS上测试某些内容。
- 第1部分-具有Nimble + Snapshots的UIViews
- 第2部分-单元测试-JSON的解析
- 第3部分-单元测试-网络请求
附:如果您喜欢这篇文章,请在Twitter上分享,或在中级推荐,或两者都=)。 这确实有助于我吸引更多人。 非常感谢。
- 如果在最清晰的视图中显示并且不同的视图可以处理它们时,如何忽略触摸事件
- didBeginContact传递了PKPhyicsObject
- ios的浏览器协议处理程序选项
- 2 UITableViews在一个UIView
- 如何调用scrollViewDidScroll:与UIScrollView相同,但在自定义动画期间?
- 从parsingsdk中获取Swift图像 – 崩溃
- 在parsing查询中添加mapview注释将随机返回null
- 如何正确使用“openParentApplication”和“handleWatchKitExtensionRequest”以便“reply()”被调用?
- 在您的应用中采用3D Touch快捷方式项。