【问题标题】:TDD: Why do 'Red Green Refactor' instead of just 'Green Refactor'? [closed]TDD:为什么要“红绿重构”而不仅仅是“绿重构”? [关闭]
【发布时间】:2016-10-16 18:22:49
【问题描述】:

我已经 4 个月进入专业软件开发领域。 TDD 在我的公司 GO-JEK 是不可协商的。 以下是我的观察:人们倾向于先写代码,然后为它写测试。显然,这对于有 4-5 年软件开发经验且之前没有遵循 TDD 的人来说更方便. 那么,人们首先编写一个失败的测试,然后编写代码来通过它的原因是什么?为什么人们不先编写代码然后为其添加测试? 我们可以通过任何一种方式进行重构

【问题讨论】:

  • 稍微介绍一下,这些问题在我脑海中有明确的答案 1. TDD 如何帮助重构? 2. TDD 如何提高软件开发人员的意识并整体缩短整个软件开发周期的时间?
  • 它可以帮助您只编写通过测试所需的代码。首先编写代码很容易编写超出实际需要的内容。或者编写最终没有经过测试的代码。

标签: unit-testing tdd automated-tests software-design


【解决方案1】:

这是个好问题。既然我们最终希望我们的测试通过,为什么不首先编写它们让它们通过呢?

答案是我们真的希望我们的测试能够推动开发。我们希望测试首先出现。因为当我们编写需要某些功能的测试时,这是对所需内容的具体表达,并且新的功能已经定义好。最初该功能不存在(因此测试为红色);当我们成功添加功能时,测试是绿色的。这是一个明确的决定:要么功能存在且测试通过 - 要么不存在且测试失败。

如果我们把测试写成绿色(功能已经存在),我们写的功能可能比我们实际需要的多。或者我们可能编写了错误的代码——功能存在但错误——以及相应的错误测试。当我们首先编写测试时,我们见证了代码库从缺乏必要功能的状态转变为拥有它的状态——我们非常有信心地知道我们做对了。

【讨论】:

    【解决方案2】:

    通过编写失败的测试,您知道您的测试可能失败,这是单元测试的重点,在不工作时会失败。有可能只看到测试通过,就可以用永远不会失败的方式编写它,即忘记添加断言或编写不佳的测试。

    此外,通过逐步通过“失败”测试,您知道每次代码更改都会增加价值。

    【讨论】:

    • 是的,当我编写已经是绿色的测试时,总是发生在我身上:事实证明,它们永远不会变红并告诉我是否有问题。
    【解决方案3】:

    我的首选方法是编写测试,然后编写代码以使其通过 (TDD),但即使您最终为现有代码编写测试(例如使用遗留代码),您仍然希望执行 RED -绿色 - 重构过程。

    为现有代码编写一个您认为会失败的测试(例如通过反转您的断言),然后验证它确实失败,事实上,失败会让您确信您的测试正常工作以及何时设置断言在正确的意义上,它会令人信服地通过。否则,你怎么知道你没有从测试中得到误报 - 或者测试实际上是由测试运行器运行的(使用一些单元测试框架)?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 2022-06-17
      • 1970-01-01
      相关资源
      最近更新 更多