测试Marvel的View Code项目..具有100%的代码覆盖率!

在项目中采用视图代码确实可以帮助它变得更加模块化。 几周前,我写了一篇文章,展示了如何迁移使用情节提要+ xibs构建的Marvel项目来查看代码,您可以在此处进行检查。 在那篇文章中,我描述了这样做的一些好处,其中之一就是与测试有关。 视图代码更易于测试,因此,当您采用视图代码时,您的测试服会越来越多。 今天,我将展示如何为项目编写测试以及在此过程中进行的一些重构。 您可以在此处通过测试检查存储库。

**这个Marvel的项目是在一系列的帖子中创建的,如果您错过了查看的话。

为什么测试更容易?

首先,查看代码使您可以控制代码的初始化过程。 这似乎没什么大不了,但请相信我。 现在,您可以编写一个与给定类型一起使用的自定义初始化程序,这有几个好处:

  • 您可以在测试环境中使用setter注入,例如,提供伪造的实现(模拟)而不是真实的实现。 这可以帮助您独立运行测试,稍后再介绍。
  • 现在,您可以控制初始化过程,您可以使用let删除一些可选参数并将变量定义为常量。
  • 语义上更正确,比方说您正在创建角色视图控制器。 现在,您可以强制要求有人在视图控制器初始化过程中提供字符,这很有意义。

经过所有的重构和测试编写,我设法将应用程序的代码覆盖率提高到100%

代码覆盖率本身不应达到某个特定数字。 而是应将其用作地图,该指南显示了可以在项目中改进的地方的提示。 在某种程度上,代码覆盖率的真正价值是回答这个问题, 接下来我要测试什么? 以同样的方式,您的测试应用于重构代码并使之更好。 更好的代码意味着:

  • 更具模块化
  • 更可重用
  • 封装好
  • 明确而单一的目的
  • 易于开发的代码
  • 易于维护的代码

测试之所以能够帮助您“使代码变得更好”,是因为它们使您可以从接口的角度来了解代码的调用者。 如果要在后台做很多事情,通常很难测试,因此需要重构。

有无视图代码..!

现在,让我们将在早期版本的项目中使用Storyboard + xibs进行的测试与在该版本中的视图代码进行比较。 这将使我们能够检查两种方法之间的好处和区别。

使用Storyboard进行CharacterViewController测试

使用查看代码的CharacterViewController测试

您现在可以看到,使用视图代码,我们可以摆脱以前用于获取视图控制器的许多样板代码。 以前,我们无法控制初始化过程,因此我们必须从情节提要中恢复它,并重复相同的旧配方。 好吧, 不再了!

第二个版本不需要测试不是从视图控制器给出字符的情况,因为现在它是init进程的参数,这意味着如果有人想要一个CharacterViewController,他们将需要为该字符提供一个字符。在里面。

CharactersViewController测试..

现在我们可以控制视图控制器的初始化过程了,我们可以将apiManager作为视图控制器的参数来提供,使设置器注入变得轻而易举,同时使用let可以将控制器中apiManager的变量保持不变。 在没有视图代码的先前版本中,我们必须将其保留为var进行注入,将其返回时我们无法控制初始化。

没有查看代码..

与查看代码..

能够控制初始化过程是如此重要,它使您可以更好地控制代码!

您可以使用下面的视图代码检查对CharactersViewController的改进测试。

CharacterTableCell规格..

characterTableCell测试也得到了极大的增强,没有视图代码,我们不得不使用cellForRow方法从数据源中恢复它,这意味着我们不得不重复同样的方法,从情节提要中加载视图控制器。 不再! 现在我们只需要初始化单元并根据需要进行测试..

组件,组件以及更多组件!

采用视图代码的最好的事情之一是,您的代码被分割成许多具有单一目的的组件,这些组件是自包含的。 这使测试变得更加容易,并且消除了方程的许多模拟和依赖性。

在下面,您可以检查CharactersCollectionSpec ,这是对自包含组件的测试,可以将其插入任何视图控制器以提供字符集合。 该测试很简单,在以前的版本中(没有视图代码),要测试系统的这一部分要困难得多,因为其中很多都在视图控制器中,依此类推。 现在,它更加具体和清晰。

接下来要去哪里?

**我不会介绍所有不同的案例,我想您已经明白了。 话虽如此,我真的建议你们克隆与它一起进行的项目,以此类推。

我真的认为视图代码可以改善项目的许多领域,仅测试其中之一即可。 尽管使用视图代码测试项目更容易,但绝不是唯一的方法。 使用情节提要+ xibs构建的Marvel项目的先前版本具有96%的代码覆盖率。 如果您想看到它,请查看我的其他文章。 关键区别在于,使用视图代码可以使测试和代码变得更好,更简单。 因此,在您的下一个项目中尝试一下,您将不会后悔。

分享您的想法,作为回应。 我真的认为这可能是个很棒的讨论!

与往常一样,任何想法,疑问或反馈都值得欢迎。 =)

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