当前位置:  开发笔记 > 编程语言 > 正文

使用JMockit在抽象类中模拟非公共静态方法?

如何解决《使用JMockit在抽象类中模拟非公共静态方法?》经验,为你挑选了1个好方法。

我有以下课程:

public abstract class AbstractParent {
    static String method() {
        return "OriginalOutput";
    }
}

我想嘲笑这个方法.我决定使用JMockit.所以我创建了一个模拟类:

public class MockParent {
    static String method() {
        return "MOCK";
    }
}

我的测试代码如下所示:

public class RealParentTest {

    @Before
    public void setUp() throws Exception {
        Mockit.redefineMethods( AbstractParent.class, MockParent.class );
    }


    @Test
    public void testMethod() {
        assertEquals(MockParent.method(),AbstractParent.method());
    }

}

不幸的是,这个测试表明AbstractParent返回"OriginalOutput"而不是"MOCK".有什么想法吗?难道我做错了什么?我已经尝试将我的模拟类声明为抽象,但无济于事.

编辑注意,使方法公开会导致测试运行没有问题...这很奇怪,因为使用JMockit,您应该能够模拟任何范围的方法.

回答只有mock方法需要公开,你可以保留原来的方法.



1> Epaga..:

找到了解决方案:你只需要将mock的方法设为public(原始方法可以保持其原始可见性).

我不知道为什么这种方法有效,而原始方式却没有(有人欢迎加入),但你需要做的只是将上面例子中的mock类更改为:

public class MockParent {
    public static String method() {
        return "MOCK";
    }
}


mock方法需要公开的原因是JMockit修改了mocked方法来调用mock方法.也就是说,对原始方法的调用从同一方法内部重定向到mock.因此,必须可以从插入调用的那一点访问mock方法.
推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有