gpt4 book ai didi

java - 一起使用构造函数注入(inject)和默认构造函数是否不好?

转载 作者:行者123 更新时间:2023-12-02 07:48:50 25 4
gpt4 key购买 nike

我目前正在尝试提高用 Java 编写的遗留系统的可测试性。目前最存在的问题是存在无法模拟的“内部”依赖关系。解决这个问题的方法非常简单:引入依赖注入(inject)。

不幸的是,代码库非常大,因此在整个应用程序中引入依赖注入(inject)需要付出巨大的努力,直到“引导”。对于我想要测试的每个类,我都必须更改另外一百个(也许我在这里夸大了一点,但肯定会很多)类,这取决于更改的组件。

现在我的问题是:使用两个构造函数可以吗?一个默认构造函数用默认值初始化实例字段,另一个允许注入(inject)依赖项?使用这种方法有什么缺点吗?它将允许依赖注入(inject)以供将来使用,但仍然不需要更改现有代码(尽管正在测试类)。

当前代码(“内部”依赖项):

public class ClassUnderTest {

private ICollaborator collab = new Collaborator();

public void methodToTest() {
//do something
collab.doComplexWork();
//do something
}

}

使用默认/di 构造函数:

public class ClassUnderTest {

private ICollaborator collab;

public ClassUnderTest() {
collab = new Collaborator();
}

public ClassUnderTest(ICollaborator collab) {
this.collab = collab;
}

public void methodToTest() {
//do something
collab.doComplexWork();
//do something
}

}

最佳答案

这绝对没问题,我偶尔也会这样做,特别是对于服务风格的类,由于遗留代码或框架限制,默认构造函数是必需的。

通过使用两个构造函数,您可以清楚地分离默认协作者对象,同时仍然允许测试注入(inject)模拟。您可以通过使第二个构造函数受包保护并将单元测试保留在同一个包中来强化意图。

它不像成熟的依赖注入(inject)那样好,但这并不总是一个选择。

关于java - 一起使用构造函数注入(inject)和默认构造函数是否不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8939212/

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