我在一个月的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部分-单元测试-网络请求。