我听说使用TDD开发的项目更容易重构,因为这种做法产生了一套全面的单元测试,如果有任何更改破坏了代码,它们(希望)会失败。然而,我所看到的所有例子都涉及重构实现 - 例如,用更高效的算法改变算法。TDD如何使重构更容易?
我发现重构架构在设计仍在制定的早期阶段更为常见。接口改变,新的类被添加删除,甚至一个函数的行为可能会稍微改变(我认为我需要它来做到这一点,但它实际上需要这样做),等等......但是,如果每个测试案例是紧密耦合的对于这些不稳定的类,每次你改变设计时,你不需要不断地重写你的测试用例吗?
在什么情形下在TDD是好的改变和删除测试用例?你如何确定改变测试用例不会破坏它们?另外,似乎不得不同步全面的测试套件和不断变化的代码将是一个痛苦。我明白,一旦软件建立,稳定和正常运行,单元测试套件可以在维护过程中发挥巨大作用,但在TDD应该尽早提供帮助的时候,这在游戏的后期也是如此。
最后,一本关于TDD和/或重构的好书能够解决这些问题吗?如果是这样,你会推荐哪个?
我一直在考虑同样的事情。从某种意义上说,测试可以说是违反了DRY,因为一段代码的行为既反映在代码中,也反映在测试它的代码中。 – Boris 2010-01-11 19:44:48