gpt4 book ai didi

java - 为什么我们不能使用 Mockito 为参数化构造函数创建 spy

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:10:04 24 4
gpt4 key购买 nike

我的代码中只有参数化构造函数,我需要通过它注入(inject)。

我想监视参数化构造函数以注入(inject)模拟对象作为我的 junit 的依赖项。

public RegDao(){
//original object instantiation here
Notification ....
EntryService .....
}

public RegDao(Notification notification , EntryService entry) {
// initialize here
}

we have something like below :
RegDao dao = Mockito.spy(RegDao.class);

但是我们有什么东西可以在构造函数中注入(inject)模拟对象并监视它吗?

最佳答案

您可以通过在您的 junit 中使用参数化构造函数实例化您的主类,然后从中创建一个 spy 来做到这一点。

假设您的主类是A。其中 BC 是它的依赖

public class A {

private B b;

private C c;

public A(B b,C c)
{
this.b=b;
this.c=c;
}

void method() {
System.out.println("A's method called");
b.method();
c.method();
System.out.println(method2());

}

protected int method2() {
return 10;
}
}

然后您可以使用您的参数化类为此编写 junit,如下所示

@RunWith(MockitoJUnitRunner.class)
public class ATest {

A a;

@Mock
B b;

@Mock
C c;

@Test
public void test() {
a=new A(b, c);
A spyA=Mockito.spy(a);

doReturn(20).when(spyA).method2();

spyA.method();
}
}

测试类的输出

A's method called
20
  1. 此处 BC 是您使用参数化构造函数注入(inject)到类 A 中的模拟对象。
  2. 然后我们创建了 Aspy,称为 spyA
  3. 我们通过修改 A 类中 protected 方法 method2 的返回值来检查 spy 是否真的有效,这不可能如果 spyA 不是 A 的实际 spy

关于java - 为什么我们不能使用 Mockito 为参数化构造函数创建 spy ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45514907/

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