gpt4 book ai didi

java - 旧代码中的 TDD - 破坏 'Constructor' 依赖关系

转载 作者:行者123 更新时间:2023-12-01 17:45:44 25 4
gpt4 key购买 nike

在 JAVA 应用程序中,我有以下类:

public class PathEditor extends DocumentListBase {
public PathEditor(Paths paths, Frame frame) {
super(frame);

// Some logic is being executed here.
}
}

该类使用了一些复杂的继承,但下面列出了能够实例化 PathEditor 所涉及的所有类。

路径

public class Paths {
}

框架

public class Frame extends DocumentListItemBase {
public Frame(DocumentBase parent) {
super(parent);
}
}

文档列表项库

public class DocumentListItemBase extends DocumentBase {
public DocumentListItemBase(DocumentBase parent) {
super(parent);
}
}

文档库

public class DocumentBase {
public Document _document;

public DocumentBase(DocumentBase parent) {
}

public Document getDocument() {
return this._document;
}
}

文档列表库

public class DocumentListBase extends DocumentBase {
public DocumentListBase(DocumentBase parent) {
super(parent.getDocument());
}
}

文档

public class Document extends DocumentBase {
public Document(DocumentBase parent) {
super(parent);
}
}

现在,我需要向 PathEditor 添加一个函数,我想使用 TDD 方法添加该函数。您可能会看到这个问题,我无法在 UT 上下文中创建 PathEditor,因为它取决于具体类型。

请注意,具体类型在其构造函数中执行一些逻辑,例如调用数据库,因此不适合将它们添加到“UT”上下文中。

显然,必须重构此类以允许 TDD 方法,但该类不包含任何测试。使此类可测试的首选方法是什么,使用尽可能小的更改,以便我确定我不会破坏构造函数所做的任何事情?

最佳答案

  1. 如果现有代码没有测试,您的首要任务是在修改该代码之前添加测试。这将为您的更改形成基线,确保您不会引入回归。
  2. 显示的具体类都不是final,因此,例如,PathsFrame 可以被子类化为测试模拟,如果这让事情变得更容易。只要依赖项被注入(inject)并且可扩展,依赖项是否具体并不重要。
  3. 如果构造函数依赖于未注入(inject)的依赖项,并且您希望在不调用这些依赖项的情况下测试此类类,则可能会被迫重构这些类。从#1 开始,在重构之前编写(至少是集成)测试。

关于java - 旧代码中的 TDD - 破坏 'Constructor' 依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60867905/

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