我在一个月的TDD中学到了什么

很长一段时间,我编写程序时都没有编写任何测试线。 实际上,我认为编写测试是在浪费时间,直到我开始在一家公司工作时,我的工作是为编码不良的应用创建新功能。 每次编写新行时,我都会对该应用程序进行一百次修改,以确保它仍然可以正常工作。 这让我意识到测试非常重要,但是即使考虑到这一点,我也没有给出正确的价值。

有一天,我的同事提出了一个好主意。 让我们以一个新的流程开始这个新项目,让我们使用他说的TDD。 但是TDD到底是什么?

TDD是一种鼓励程序员在编写代码之前编写测试的软件过程。

测试驱动开发TDD )是一种软件开发过程,它依赖于非常短的开发周期的重复:将需求转换为非常具体的测试用例,然后对该软件进行改进以仅通过新的测试。

在那一刻之前,我还没有编写很多测试代码,我知道这个TDD决定会让我遭受痛苦。 我将学习测试,新的库以及最重要的内容:如何编写良好的测试代码。

我们做了两周的配对编程,所以我可以习惯TDD及其生命周期,即:编写测试代码并运行。 它可能会失败,实际上,它应该 会失败 ,现在您可以编写一些代码,但仅需最少的代码即可通过测试。 再次运行测试,它应该 通过 。 现在,您可以编写更多测试或重构以前的代码,而无需添加新功能。

在这一挑战中,我们决定使用一些库来帮助我们在iOS中编写测试:Quick,Nimble,Nimble + Snapshots和KIF:

GitHub – Quick / Quick:Swift(和Objective-C)测试框架。
快速– Swift(和Objective-C)测试框架。 github.com

帮助您编写测试,为beforeEach和测试本身定义各种测试的上下文。 使测试更具可读性很有用。

敏捷

GitHub – Quick / Nimble:Swift和Objective-C的Matcher框架
Nimble –一个用于Swift和Objective-C的Matcher框架 github.com

使您的断言也更易读,而不是使用XCTAssertEqual(1+1,2,"expected one plus one equal two")您可以编写XCTAssertEqual(1+1,2,"expected one plus one equal two") expect(1+1) == 2 。 这么容易。

敏捷快照

github – ashfurrow / Nimble-Snapshots:FBSnapshotTestCase的灵活匹配器
Nimble-Snapshots – FBSnapshotTestCase的灵活匹配器 github.com

是一个很棒的库,当我们谈论UI单元测试时,它会很有帮助。 它需要您的UI的屏幕截图,并检查是否没有弄乱它。 您可以使用expect(view) == recordSnapshot("screenshot-name")记录快照,然后可以通过将recordSnapshot更改为snapshot来检查snapshot例如recordSnapshot expect(view) == snapshot("screenshot-name")

KIF

KIF框架/ KIF
KIF –保持功能正常–一个iOS功能测试框架 github.com

是我们用来测试UI事件的框架,例如按钮的点击或UITableView的滚动行为。

通过所有这些测试和库,我从TDD中学到了什么?

首先,我学会了如何编写测试,从JSON的解析到UIView,这真是太神奇了,因为在发布新功能之前,我不需要在模拟器(或设备)中测试应用程序十亿次。 我们的单元测试为我们做到了。

其次,我习惯于编写测试。 不再是床下的怪物,实际上,现在我更喜欢在代码之前编写测试。 它使编写更好的代码成为可能,因为如果编写测试时遇到麻烦,则您的代码可能一团糟,应该重构它。

这篇文章只是一系列文章的介绍,我正在努力展示如何使用Quick,Nimble,Snapshot和KIF从JSON的解析到ViewControllers(包括协议,表视图等)编写测试。

如果您有任何建议或想知道如何编写某种测试,请告诉我,我将尝试在帖子中进行。

更新资料

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