测试驱动开发
概念
Test-Driven Development,简称TDD,它要求在编写某个功能的代码之前先编写测试代码(UI功能测试、接口测试、单元测试),然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。
过程
测试驱动开发的基本过程如下:
- 快速新增一个测试
- 运行所有的测试(有时候只需要运行一个或一部分),发现新增的测试不能通过
- 做一些小小的改动,尽快地让测试程序可运行,为此可以在程序中使用一些不合情理的方法
- 运行所有的测试,并且全部通过
- 重构代码,以消除重复设计,优化设计结构 简单来说,就是不可运行/可运行/重构——这正是测试驱动开发的口号。
优势
- TDD根据客户需求编写测试用例,对功能的过程和接口都进行了设计,而且这种从使用者角度对代码进行的设计通常更符合后期开发的需求。
- 出于易测试和测试独立性的要求,将促使我们实现松耦合的设计,并更多地依赖于接口而非具体的类,提高系统的可扩展性和抗变性。
- 将测试工作提到编码之前,并频繁地运行所有测试,可以尽量地避免和尽早地发现错误,极大地降低了后续测试及修复的成本,提高了代码的质量。
- TDD提供了持续的回归测试(DevOps),使我们拥有重构的勇气,因为代码的改动导致系统其他部分产生任何异常,测试都会立刻通知我们。
- TDD所产生的单元测试代码就是最比较好的开发者文档,它们展示了所有的API该如何使用以及是如何运作的,而且它们与工作代码保持同步,永远是最新的。