gpt4 book ai didi

java - 在 TDD 中,在重构期间将主类拆分为子类

转载 作者:行者123 更新时间:2023-11-30 08:02:12 25 4
gpt4 key购买 nike

我正在尝试遵循 TDD 并且对它有点陌生。我有一个要实现的接口(interface) (Java)。

所以我开始为接口(interface)行为编写测试用例,使它们失败并通过添加或修改代码来修复它们。

但是,当我看到主类的规模越来越大时,我将主类分成单独的类。但是对于一些子类,我意识到最好单独测试它们并在主类测试用例中模拟它们。

但是,当我这样做时,我不得不再次重写主类测试用例(对于移动的代码),导致大量流失和重复工作。

我在实现 TDD 方法时做错了什么吗?

最佳答案

听起来你做得对。但是,有几点需要说明。重申以确保我们在同一页面上:

从主类A中提取一个辅助类B,

  • 从 A 重构 B
  • 为 B 编写测试(借鉴 A 的测试)
  • 删除与 B 测试重复的 A 测试
  • 如果合适,重写 A 的剩余测试或依赖于 B 中现在功能的测试,以使用 B 的模拟

一些建议:

  • 在提取辅助类后,您可以删除主类中测试辅助类功能的测试,只保留一个(或几个)。因此,您不应该有太多需要重写的主类剩余测试。

    例如,如果主类为一个人建模,而辅助类根据他们的名字、姓氏、头衔等构造这个人的全名,那么主类最初将对该功能进行许多测试:一个给定名称与不止一个,标题与无标题等。您将为助手类编写等效测试,然后删除除一个关于全名构造的主类测试之外的所有测试。您确实需要在主类中留下一个测试,测试它是否知道如何构造某种全名;如果您错误地删除了对助手类的调用或类似的东西,该测试将失败。

  • 如果辅助类很简单(特别是,如果它没有需要特殊测试设置或导致速度缓慢的大量依赖项),则不必模拟它。 这可能会为您节省一些主类测试的重写。

  • 此过程确实需要对测试和代码进行返工。 通过提前思考并在确信重构会有所帮助后立即进行重构,从而最大限度地减少返工。我发现,当我认为我需要提取一个类时,我通常是对的;我以后很少需要内联类(class)。因此,积极地提取类通常不会导致额外的工作,而是通过更快地获得正确的对象模型来最大限度地减少它。

关于java - 在 TDD 中,在重构期间将主类拆分为子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37109329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com