gpt4 book ai didi

Java Mockito : Cannot doReturn child classes?

转载 作者:行者123 更新时间:2023-11-30 08:16:03 25 4
gpt4 key购买 nike

当我尝试模拟方法时,收到 UnfinishedStubbingException 。我试图让 doReturn 返回实现特定接口(interface)的类的模拟实例。该接口(interface)是被模拟方法的原始返回类型。

这是类结构的示例:

class A { 
private C obj;

C getObj() {
return obj;
}
}

class B implements C {
void doCStuff() {}
void doBStuff() {}
}

interface C {
void doCStuff();
}

通过这个结构,我尝试模拟 A.getObj() 并让它返回 B 的模拟实例。

public void test() {
A aObj = Mockito.mock(A.class);
B bObj = Mockito.mock(B.class);

Mockito.doReturn(bObj).when(aObj).getObj(); //throws UnfinishedStubbingException

//Edit:
B newB = (B)aObj.getObj();
newB.doBStuff();
}

问题是,我需要让 getObj 返回 B 的模拟实例,但我做不到。通常在 Java 中,我可以从返回类型为 C 的方法以多态方式返回 B 的实例,因为 B 实现了 C。但是,似乎 doReturn 无法返回实现原始返回类型的子类的实例。

我希望我理解正确,但是我做错了什么或者有解决办法吗?

最佳答案

啊,我是个白痴。事实证明我试图模拟的方法是最终的,我最初没有注意到这一点。这是来自 super 类的,我认为这不是最终的。 final方法不能被覆盖,Mockito 不能模拟它们。

这是一个更好的例子:

class A extends D {
...
}

class D {
//Can't mock this.
final Object getObj() { ... }
}

事实证明,您仍然可以通过 Mockito 以多态方式返回对象,因此这是误报。

关于Java Mockito : Cannot doReturn child classes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29662889/

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