gpt4 book ai didi

java - JMockit MockUp 可以模拟 toString() 吗?

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

考虑以下示例 MockUpFoo 拦截构造函数中的 Bar 然后实现 toString()Bar 方面;

public class FooStub extends MockUp<Foo> {

private Bar bar;

@Mock
public void $init(Bar bar) {
this.bar = bar;
}

@Mock
public String toString() {
return bar.toString();
}
}

如果 Foo 碰巧覆盖 toString() 一切正常。否则,您会得到一个 IllegalArgumentException:“为以下模拟找不到匹配的真实方法”。我从这里了解到,JMockit 不查看基类,因此找不到要模拟的 toString() 方法。

假设我不能修改 Foo 类(实际上我可以,但只是为了争论),有什么办法可以模拟 toString() 只是为了这个 Foo 类?

明确地说,我想模拟这个类的所有实例,而不仅仅是一个实例(它有不需要 MockUp 的简单解决方案)。

最佳答案

JMockit 将模拟类层次结构中的所有父类(super class)up to但不包括 java.lang.Object.

您可以在测试中定义 private final 类,它通过覆盖委托(delegate)给 BartoString() 来扩展 Bar code> 的 toString() 通过调用 super.toString():

private final class Baz extends Bar {
@Override
public String toString() {
return super.toString();
}
}

现在您在 mock 中所要做的就是通过 Baz 而不是 Bar 进行委托(delegate)。

通过这种方式,您可以获得 toString() 的具体而透明的实现,您可以在不触及可能不受您控制的 Bar 类的情况下对其进行模拟。

关于java - JMockit MockUp 可以模拟 toString() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32798116/

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