我有一个单元测试问题,其中一个类有一个静态变量,它想要加载Spring Application Ctx。
这个课程不会出自Bean Factory,我无法改变这一事实。
static ApplicationContext applicationContext = ...;
这很好,但很难 JMock ,或者至少我不知道一种方式,直到我能够启动Spring Ctx。不适合单元测试情况。
有人知道吗? 我可以选择将静态变量更改为我想要的任何内容..
感谢。
答案 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;
}