我有一个单元测试问题,其中一个类有一个想要加载 Spring Application Ctx 的静态变量。
这个类不是从 Bean Factory 出来的,我无法改变这个事实。
static ApplicationContext applicationContext = ...;
这工作正常,但很难JMock,或者至少我不知道一种方法,直到我可以 Spring Ctx 想要启动。不适合单元测试情况。
有没有人知道的解决方法?我可以选择将静态变量更改为我想要的任何东西..
谢谢。
我有一个单元测试问题,其中一个类有一个想要加载 Spring Application Ctx 的静态变量。
这个类不是从 Bean Factory 出来的,我无法改变这个事实。
static ApplicationContext applicationContext = ...;
这工作正常,但很难JMock,或者至少我不知道一种方法,直到我可以 Spring Ctx 想要启动。不适合单元测试情况。
有没有人知道的解决方法?我可以选择将静态变量更改为我想要的任何东西..
谢谢。
自己解决了这个问题。
最后真的很简单。只是需要将我的静态包装在一个我可以模拟的类中。
public class ApplicationContextHolder implements ApplicationContextHoldable {
protected static ApplicationContext applicationContext = ...;
@Override
public ApplicationContext getApplicationContext() {
return ApplicationContextHolder.applicationContext;
}
}
好的。具有讽刺意味的是,Spring 擅长的一件事是管理单例,因此不需要静态变量 :)
您可以使用基于反射的 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;
}