代码之家  ›  专栏  ›  技术社区  ›  Lieven Keersmaekers

在执行TDD时发现其他对象

  •  10
  • Lieven Keersmaekers  · 技术社区  · 15 年前

    我正在努力练习TDD。

    我的理解 TDD应该是这样的吗

    1. 为我将要开发的接口/类编写一个测试列表。
    2. 编写测试,还没有实现代码。
    3. 运行测试,导致一个测试失败。
    4. 编写使测试通过的实现。
    5. 把我弄得一团糟。
    6. 转到2。

    我的问题 是在编写实现或进行重构时。我经常得出这样的结论:我刚刚编写的实现应该委托给另一个类。

    在这一点上,真正的TDD'r应该做什么?

    1. (在实施新课程时,同样的问题也会表现出来)
    2. 以基于交互的方式测试并模拟新类,继续您正在处理的类的测试用例,稍后再回来创建模拟类的正确实现。
    3. 这种情况不应该出现。我可能还没有充分考虑我最初的设计。 (但这难道不会挫败TDD的目的之一吗?!)

    4 回复  |  直到 7 年前
        1
  •  9
  •   Yishai    15 年前

    不要在测试和类之间寻找一对一的关系。如果您决定引入一个新类,那么就让它成为原始测试支持的重构,并在您想要添加功能(或测试您需要涵盖的尚未测试的可能情况)时,在适当的位置(这取决于具体情况)添加测试。

    我想补充一点,TDD的主要成功在于融入红-绿重构的节奏。当你感受到这种节奏的好处时,你就开始“理解”它。这并不是说你会发现它在所有情况下都是值得的,但在你感受到这种节奏之前,你还没有达到它的拥护者喜欢的程度。

    而且通常(特别是在架构复杂的应用程序中,如n层应用程序)有一些预先设计。没有什么是用石头画的,但足够给单位一个地方去。当然,架构可能会在敏捷方法中发展,但如果架构有多个层次,则需要有一个总体的景观概念。

        2
  •  6
  •   Carl Manaster    15 年前

    我的问题是当我 到达第6点&7、在某个时刻 随着时间的推移,我总是来参加聚会 结论:实施I 刚才写的应该委托给 另一节课。

    使用不同的类来实现您的设计会更好——这就是设计,这就是TDD的要点。所以这是件好事,不应该打扰你。

    之后 步骤6,在步骤7中。一旦你是绿色的,重构到一个更好的设计。你已经有了新类的测试;他们只是打电话给原来的班级。那很好。在提取类并进行委派之后,如果您更愿意让测试直接调用提取的类,那么:开始吧。没有害处。如果提取的类开始被其他调用方使用,我建议您使用它,也许当您开始从其他类调用它时,是这样做的好时机(但是如果它让您感到不舒服,现在就做)。

        3
  •  2
  •   David Seiler    15 年前

    当我遇到这种情况时,我会遵循你的解决方案。继续递归,创建尽可能多的您认为合适的类,直到您有了满意的实现集合。有了经验,你会发现你的设计反映了你的经验,而这种事情不会发生太多。

        4
  •  1
  •   Toon Krijthe    15 年前

    稍后,您可以对新类重复该过程。