【问题标题】:How to call a real method from a mocked class using jmockit如何使用 jmockit 从模拟类中调用真实方法
【发布时间】:2017-04-28 05:42:14
【问题描述】:

假设我有一个班级 MockLoginHelper,我使用 jmockit 进行了模拟。我想更改getSDKConfig 方法之一的行为。在这个方法里面我想调用原来的LoginHelper.relogin。我的eclipse认为下面的relogin();是未定义的。那么,如何从模拟类中调用真实方法?

class MockLoginHelper extends MockUp<LoginHelper> {
    @Tested
    private SDKConfiguration config;

    @Mock
    public SDKConfiguration getSDKConfig() {
        System.out.println("");
        System.out.println("Mocked " + this.getClass().getSimpleName());
        if (config == null) {
            try {
                relogin();
            } catch (Exception e) {
                System.err.println("failed to relogin");
                e.printStackTrace();
            }
        }
        return config;
    }
}

【问题讨论】:

标签: java junit jmockit


【解决方案1】:

Java 编译器正确地认为 relogin 方法不在您的模拟类中,因为 MockLoginHelper 扩展了 MockUp 类,而不是 LoginHelper 类。你有两个选择。如果您想真正调用LoginHelper 的实际实现,那么您需要实例化一个新的:

class MockLoginHelper extends MockUp<LoginHelper> {
    @Tested
    private SDKConfiguration config;

    @Mock
    public SDKConfiguration getSDKConfig() {
        System.out.println("");
        System.out.println("Mocked " + this.getClass().getSimpleName());
        if (config == null) {
            try {
                LoginHelper helper = new LoginHelper();
                helper.relogin();
            } catch (Exception e) {
                System.err.println("failed to relogin");
                e.printStackTrace();
            }
        }
        return config;
    }
}

否则,您可以选择执行模拟实现并调用该模拟:

class MockLoginHelper extends MockUp<LoginHelper> {
    @Tested
    private SDKConfiguration config;

    @Mock
    public void relogin() {}

    @Mock
    public SDKConfiguration getSDKConfig() {
        System.out.println("");
        System.out.println("Mocked " + this.getClass().getSimpleName());
        if (config == null) {
            try {
                relogin();
            } catch (Exception e) {
                System.err.println("failed to relogin");
                e.printStackTrace();
            }
        }
        return config;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    相关资源
    最近更新 更多