单元测试— UITableView

向用户显示数据的最常见方式是使用某种无休止的表格,例如Instagram的feed,Facebook的时间轴,WhatsApp的消息等。

作为iOS开发人员,您有一些工具可以实现这一目标。 您可以使用UITableViewUICollectionViewIGListKit等。 所有这些工具都有共同点,它们都使用委托/数据源模式,并具有用于显示数据的自定义视图。

在本文中,我将展示如何使用UITableView测试集合的委托,数据源和视图。

数据源

首先,让我们创建一个新文件并从UITableViewDataSource实现一些方法。 在此示例中,我们将使用默认的UITableViewCell作为单元格,使用String作为模型,但是可以随意使用所需的任何单元格和模型。

根据[String]?我们的单元格将具有不同的标题[String]? 数据。

MyDelegateDatasource文件

之后,让我们编写一些测试。 在每次测试之前,我们将创建一个[String]来填充我们的表,创建一个MyDelegateDatasource对象,将UITableViewCell注册到我们的表中并设置其委托和数据源。

目前,我们有两项测试:

  • 行数
  • 节数

我们的行数应为5,并应包含1个部分。 cellForRow方法将在以后进行测试。

MyDelegateDatasource测试文件

代表

我们的代表有点不同,要测试它,我们需要对其进行模拟,一种简单的方法是创建一个协议。

每次用户选择一个单元格时,我们都将其称为该协议。 因此,现在我们可以更新MyDelegateDatasource以具有MyDelegateDatasourceProtocol对象,并在每次UITableViewDelegate调用didSelectRow时都调用它。 不要忘记实现UITableViewDelegate didSelectRow方法。

MyDelegateDatasource文件

为了测试该委托,我们需要创建一个实现该协议的对象,换句话说,我们需要对其进行模拟。 我们将使用此对象检查在UITableViewDelegate调用didSelectRow时是否正在调用我们的委托。 这个模拟很简单,只需要在调用didSelectCell方法时更改一个布尔值并保存接收到的参数即可。

MyDelegateDatasourceMock文件

让我们更新测试文件,创建一个MyDelegateDatasourceMock对象并在MyDelegateDatasource上设置委托属性。

我们的委托测试是在调用tableView(tableView, didSelectRowAt: indexPath)之前检查didSelectCell属性是否为false之后是否将其更改为true 。 另外,我们正在验证收到的数据是否符合预期。

视图

我们的测试未涵盖cellForRow方法。 为了检查UITableViewCell是否按预期方式运行,我们使用了Nimble + Snapshot。 让我们添加一些测试来检查它们。

MyDelegateDatasourceTest文件

在我们的项目中,在自己的文件中实现委托和数据源将在测试时大有帮助,并使它们更易于编写和测试。

这是一系列文章的第4部分,展示了如何在iOS上测试某些内容。

  • 第1部分-具有Nimble + Snapshots的UIViews
  • 第2部分-单元测试-JSON的解析
  • 第3部分-单元测试-网络请求

附:如果您喜欢这篇文章,请在Twitter上分享,或在中级推荐,或两者都=)。 这确实有助于我吸引更多人。 非常感谢。