什么是TDD?(Test Driven Development)
测试驱动开发是一种软件开发技术,其要求先写测试用例,然后再编码让测试通过,最后重构代码消除重复及优化设计,使编码得到快速反馈。
优:1.降低开发者负担
2.保护网
3.提前澄清需求
4.快速反馈
TDD的三条规则:
1.除非是为了使一个失败的unit test通过,否则不允许编写任何产品代码
2.在一个单元测试中,只允许编写刚好能够导致失败的内容(编译错误也算失败)
3.只允许编写刚好能够使一个失败的unit test通过的产品代码
如果违反了会怎么样呢?
违反第一条,先编写了产品代码,那这段代码是为了实现什么需求呢?怎么确保它真的实现了呢?
违反第二条,写了多个失败的测试,如果测试长时间不能通过,会增加开发者的压力,另外,测试可能被重构,这时会增加测试的修改成本。
违反第三条,产品代码实现了超出当前测试的功能,那么这部分代码就没有测试的保护,不知道是否正确,需要手工测试。可能这是不存在的需求,那就凭空增加了代码的复杂性。如果是存在的需求,那后面的测试写出来就会直接通过,破坏了TDD的节奏感。
TDD的整体流程:
1.分析需求并思考如何测试,然后写一个测试。
2.运行测试,保证测试用例通过。
3.编写刚刚好使测试通过的代码。
4.运行测试,如果测试失败,需要解决使测试通过。
5.识别代码的坏味道,进行代码重构。
6.再次运行测试验证重构是否引入新的错误。如果没有通过,很可能是在重构时犯了一些错误,需要立即修复并重新运行,直到所有测试通过。
7.重复上述步骤,直到找不到更多驱动编写新代码的测试。