我听说使用TDD开发的项目更容易进行重构,因为这种实践会产生一组全面的单元测试,如果任何更改破坏了代码,这些测试用例(希望如此)将会失败。然而,我所看到的所有示例都涉及到重构实现 - 比如用更高效的算法进行更改。
但是,在早期设计仍在进行的阶段,重构架构要更加常见。接口会改变,新类会被添加和删除,甚至函数的行为也可能稍微改变(我认为它需要做这个,但实际上它需要做那个),等等... 但是,如果每个测试用例都与这些不稳定的类紧密耦合,难道你不必每次更改设计时都不断重写测试用例吗?
在TDD的哪些情况下修改和删除测试用例是可以的?您如何确保修改测试用例不会破坏它们?此外,似乎需要将全面的测试套件与不断变化的代码进行同步会很麻烦。我理解,一旦软件建立,稳定并运行良好,单元测试套件在维护过程中可以非常有帮助,但这是在游戏晚期,而TDD应该在早期也有所帮助。
最后,好的TDD和/或重构书籍是否会解决这些问题?如果是,您会推荐哪一本?