首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JMockit MockUp可以模拟toString()吗?

JMockit MockUp可以模拟toString()吗?
EN

Stack Overflow用户
提问于 2015-09-26 14:14:19
回答 1查看 1.5K关注 0票数 10

考虑下面的类MockUp示例Foo,它在构造函数中拦截Bar,然后根据Bar实现toString()

代码语言:javascript
复制
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的简单解决方案)。

EN

回答 1

Stack Overflow用户

发布于 2017-09-18 16:53:13

JMockit将模拟类层次结构上的所有超类,直到、,但不包括 java.lang.Object

您可以在您的测试中定义private final类,它通过重写toString()来扩展Bar,通过调用super.toString()将其委托给BartoString()

代码语言:javascript
复制
private final class Baz extends Bar {
    @Override
    public String toString() {
        return super.toString();
    }
}

现在,在模拟中所要做的就是通过Baz而不是Bar进行委托。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32798116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档