如何使用JMock在java中模拟静态变量

时间:2009-09-08 09:45:29

标签: spring mocking jmock spring-test

我有一个单元测试问题,其中一个类有一个静态变量,它想要加载Spring Application Ctx。

这个课程不会出自Bean Factory,我无法改变这一事实。

static ApplicationContext applicationContext = ...;

这很好,但很难 JMock ,或者至少我不知道一种方式,直到我能够启动Spring Ctx。不适合单元测试情况。

有人知道吗? 我可以选择将静态变量更改为我想要的任何内容..

感谢。

3 个答案:

答案 0 :(得分:1)

我自己解决了这个问题。

最后真的很简单。 Justed需要将我的静态包装在一个我可以随后模拟的类中。

public class ApplicationContextHolder implements ApplicationContextHoldable {

    protected static ApplicationContext applicationContext = ...;

    @Override
    public ApplicationContext getApplicationContext() {
        return ApplicationContextHolder.applicationContext;
    }

}

答案 1 :(得分:0)

尼斯。具有讽刺意味的是,Spring擅长的一件事是管理Singletons,因此不需要静态变量:)

答案 2 :(得分:0)

您可以使用基于反射的JMock API来设置私有/静态字段

    import static mockit.Deencapsulation.setField;
    //Test method
    public void testSample {
        setField(Sample.class,"isPrivate",true);
        setField(Sample.class,"isStatic",true);
    }

    private class Sample {
        private boolean isPrivate = false;
        private boolean isStatic = false;

    }