gpt4 book ai didi

java - 缺少依赖项的模拟类

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:53:28 26 4
gpt4 key购买 nike

我有我想模拟的第三方组件,但它返回的类具有复杂的层次结构,并且某些接口(interface)具有由 API 中不可用的某些类初始化的静态字段。我不需要隐藏类的任何东西。

样本:假设我们想要模拟实现 Combo 的类 MutableCombo。但是接口(interface) Combo 具有由 Breaker 初始化的字段。 Breaker 是实现包的一部分,开发者在编译和测试期间不能访问。

public interface Combo{
String FUU = Breaker.getFoo();
String BAR = Breaker.getBar();
}
public class MutableCombo implements Combo;

我想测试我的类,它与 MutableCombo 一起工作,但不能模拟它,因为

java.lang.NoClassDefFoundError: Breaker
at Combo.<clinit>(Combo.java:36)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)

最佳答案

这里你需要一个适配器。对于初学者,您不应该 mock 您不拥有的类型。将 MutableCombo 视为实现细节。例如:

public class ExampleMutableCombo implements IExampleMutableCombo
{
public String DoFoo()
{
return Breaker.getFoo();
}

public String DoBar()
{
return Breaker.getBar();
}
}

让您的代码使用IExampleMutableCombo。这个界面现在是你的了。在您的生产代码中使用它。当您拥有此接口(interface)时,您可以模拟此角色 - 您可以引入一个用于测试的假组合,例如:

public class FakeExampleMutableCombo implements IExampleMutableCombo
{
public String DoFoo()
{
return "Foo";
}

public String DoBar()
{
return "Bar";
}
}

现在您的所有测试都可以使用 stub 类,而您的生产代码可以使用 ExampleMutableCombo。关键是“编码到接口(interface)”,而不是类型。

关于java - 缺少依赖项的模拟类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15130715/

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