如何处理TDD的重构阶段

时间:2011-04-14 00:59:57

标签: unit-testing refactoring tdd

在TDD会话过程中,假设我写了一个失败的测试,然后让它通过。我通过使用诸如Extract Class和Move Method之类的重构从原始Unit中提取代码来重构。现在进一步假设我的原始测试不再涵盖提取的代码,因为原始代码现在模仿了它的依赖性,正如单元测试一样。

返回并对提取的代码进行改进测试是否合适?或者我在重构过程中如何使用未经测试的代码时犯了错误?感觉就像我的代码库正在缩放,我必须重构,我正在对重构代码进行大量的测试。这感觉真的很尴尬。我重构错了吗?

2 个答案:

答案 0 :(得分:5)

  

现在进一步假设我的原始测试不再涵盖提取的代码,因为原始代码现在模仿了它的依赖关系,正如单元测试一样。

模拟依赖关系通常是一件好事,但并非总是如此,我不会说它是“正确的单元测试”来模拟所有依赖项。

在TDD的重构步骤中,您应该在生产代码中更改不影响测试传递的内容。而且你不应该同时改变测试。

您可能希望稍后修改测试,以便独立于原始代码对提取的代码进行测试,并在原始测试中进行模拟。

答案 1 :(得分:0)

这可能表明您的单元测试不够精细。就像,你已经编写了集成测试,通过了,现在你正在进行单元测试。

或者也许在重构之后,你试图对你不应该做的事情进行测试,比如私有方法。无论如何,重构不应该改变您的代码覆盖率。