2

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

这个类不是从 Bean Factory 出来的,我无法改变这个事实。

static ApplicationContext applicationContext = ...;

这工作正常,但很难JMock,或者至少我不知道一种方法,直到我可以 Spring Ctx 想要启动。不适合单元测试情况。

有没有人知道的解决方法?我可以选择将静态变量更改为我想要的任何东西..

谢谢。

4

3 回答 3

1

自己解决了这个问题。

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

public class ApplicationContextHolder implements ApplicationContextHoldable {

    protected static ApplicationContext applicationContext = ...;

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

}
于 2009-09-08T09:58:10.047 回答
-1

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

于 2010-01-22T13:02:32.227 回答
-1

您可以使用基于反射的 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;

    }
于 2013-08-08T04:59:26.573 回答