【问题标题】:How to handle the refactoring phase of TDD如何处理 TDD 的重构阶段
【发布时间】:2011-04-14 00:59:57
【问题描述】:

在 TDD 会话过程中,假设我编写了一个失败的测试,然后让它通过。我通过提取原始单元中的代码进行重构,使用提取类和移动方法等重构。现在进一步假设我的原始测试不再涵盖提取的代码,因为原始代码现在模拟了它的依赖关系,这对于单元测试是正确的。

返回并对提取的代码进行改进测试是否合适?还是我在重构过程中最终得到未经测试的代码时犯了一个错误?感觉就像我的代码库正在扩展,我必须重构,我正在对重构的代码进行大量测试。这感觉真的很尴尬。我重构错了吗?

【问题讨论】:

    标签: unit-testing refactoring tdd


    【解决方案1】:

    现在进一步假设我的原始测试不再涵盖提取的代码,因为原始代码现在模拟了它的依赖关系,这对于单元测试是正确的。

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

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

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

    【讨论】:

    • 所以可以改造测试吗?
    • 当然。但他们应该继续工作并提供相同的覆盖范围,直到您这样做。重构不会导致您突然发现代码。
    • 我认为我的重构之一是变相​​的新代码,因此它未经测试。
    【解决方案2】:

    这可能表明您的单元测试不够细粒度。就像,您已经编写了集成测试并通过了测试,现在您正在实施单元测试。

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

    【讨论】:

    • 并非如此,但它们是很好的诊断尝试。检查@Don Roby 的 cmets 了解发生了什么。
    猜你喜欢
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    相关资源
    最近更新 更多