代码之家  ›  专栏  ›  技术社区  ›  WW.

测试驱动设计-我哪里出错了?

  •  9
  • WW.  · 技术社区  · 14 年前

    然后我加入了一个测试,意识到用我现在的结构是很困难的,而且我应该划分一个特殊的类,这个类有太多的责任。为下一次测试增加更多的责任显然是错误的。我决定把这个测试放在一边,重构我所拥有的。这就是事情开始出错的地方。

    如果不同时中断大量的测试,重构是很困难的,然后唯一的选择似乎是进行许多更改,并希望最终回到测试再次通过的地方。测试本身是有效的,我只需要在重构时破坏几乎所有的测试。重构(我还是不太满意)花了我五六个小时才通过所有测试。这些测试确实帮助了我。

    感觉好像我脱离了TDD的轨道。你认为我做错了什么?

    由于这主要是一个学习练习,我正在考虑回滚所有重构,并尝试以更好的方式再次向前推进。

    6 回复  |  直到 14 年前
        1
  •  8
  •   philant    14 年前

    也许你分班时走得太快了。步骤 Extract Class Refactoring 具体如下:

    这样,在重构类时就不会破坏大量的测试,而且可以依靠这些测试来确保在整个类拆分过程中没有破坏任何东西。

    测试行为,而不是实现

        2
  •  2
  •   Philippe A.    14 年前

    我想对公认的答案发表评论,但我目前的声誉不允许我这样做。所以这是一个新的答案。

    TDD说:

    创建失败的测试。一点密码。通过测试。

    它坚持以微小的步骤进行编码(尤其是在开始时)。将TDD视为对构建程序所执行的连续重构的系统验证。如果你迈出了太大的一步,你的重构就会失控。

        3
  •  0
  •   Andrew Bullock    14 年前

    也许你的测试水平太低了。很难说没有看到您的代码,但通常我会从头到脚测试一个特性,并确保所有我期望发生的行为都发生了。单独测试每一个方法将为您创建一个测试web。

    您可以使用NCover和DotCover等工具来检查是否遗漏了任何代码路径。

        4
  •  0
  •   Mene    14 年前

    唯一“错误”的是后来添加了一个测试。在“true”TTD中,首先在实际实现之前声明所有测试。我说“真”是因为那通常只是理论。但在实践中,你仍然拥有测试所给予的安全性。

        5
  •  0
  •   Virgil Dupras    14 年前

    我所做的是我所说的“高级测试”,它包括避免单元测试和只做高级测试(我们可以称之为“集成测试”)。它工作得很好,我避免了你提到的(非常重要的)问题。前段时间我写了一篇文章:

    http://www.hardcoded.net/articles/high-level-testing.htm

    祝TDD好运,不要放弃。

        6
  •  0
  •   dhinesh    14 年前

    我也觉得如果以前没有写测试,就不应该浪费时间去考虑是否要写测试。应立即编写测试。