2009-09-08 194 views
0

我有一个单元测试问题,其中一个类有一个想要加载Spring应用程序Ctx的静态变量。如何在Java中使用JMock模拟静态变量

这个班不出来豆厂,我不能改变这个事实。

static ApplicationContext applicationContext = ...; 

这工作得很好,但很难JMock的,或至少我不知道的方式,直到我可以在春天CTX要启动。对单元测试情况不理想。

有没有人知道的解决方法? 我可以选择将静态变量更改为任何希望的值。

谢谢。

回答

1

自己解决了这个问题。

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

public class ApplicationContextHolder implements ApplicationContextHoldable { 

    protected static ApplicationContext applicationContext = ...; 

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

} 
0

不错。具有讽刺意味的是,一两件事,春天是擅长的就是管理单身,所以不应该有一个需要静态变量:)

+0

是的,但在现实世界中,你并不总是有这个选择:) – JamesC 2010-01-23 14:36:33

0

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

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; 

    }