gpt4 book ai didi

java - 无论构造函数签名如何,模拟类的属性

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

类别

public class Foo {
private MyClass obj;

public Foo(String s, int i, boolean b) {
MyOtherClass otherObj = OtherClassFactory.getInstance();
this.obj = new MyClass(s, i, b, otherObj);
}

//More Code
}

构造函数接受一些参数,从工厂检索实例,并使用所有这些局部变量来实例化它具有的一个属性 (obj)。

但是,我关心的只是 mock obj 本身。我不关心构造函数的任何参数,也不关心 otherObj

我尝试仅注入(inject)属性:

public class FooTest {
@Mock
private MyClass fakeObj;
@InjectMocks
private Foo foo;

//More Code
}

但这不起作用,提示一下:

Cannot instantiate @InjectMocks field named 'foo' of type 'class Foo'. You haven't provided the instance at field declaration so I tried to construct the instance. However the constructor or the initialization block threw an exception : OtherClassFactory has not been initialized.

我想要做的事情可能吗?如果可能的话,如何做?如果没有,并且我需要模拟 OtherClassFactory,我该怎么做?

最佳答案

我将提供第二个构造函数,包私有(private),如下所示。

public Foo(String s, int i, boolean b) {
this(new MyClass(s, i, b, OtherClassFactory.getInstance());
}

Foo(MyClass obj) {
this.obj = obj;
}

然后在您的测试中,您可以编写

Foo toTest = new Foo(mockMyClass);

其中 mockMyClass 是您的 Mockito 模拟。

关于java - 无论构造函数签名如何,模拟类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50956358/

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