我有一个单元测试问题,其中一个类有一个想要加载Spring应用程序Ctx的静态变量。如何在Java中使用JMock模拟静态变量
这个班不出来豆厂,我不能改变这个事实。
static ApplicationContext applicationContext = ...;
这工作得很好,但很难JMock的,或至少我不知道的方式,直到我可以在春天CTX要启动。对单元测试情况不理想。
有没有人知道的解决方法? 我可以选择将静态变量更改为任何希望的值。
谢谢。
我有一个单元测试问题,其中一个类有一个想要加载Spring应用程序Ctx的静态变量。如何在Java中使用JMock模拟静态变量
这个班不出来豆厂,我不能改变这个事实。
static ApplicationContext applicationContext = ...;
这工作得很好,但很难JMock的,或至少我不知道的方式,直到我可以在春天CTX要启动。对单元测试情况不理想。
有没有人知道的解决方法? 我可以选择将静态变量更改为任何希望的值。
谢谢。
自己解决了这个问题。
最后真的很简单。 Justed需要将我的静态包装在我可以模拟的类中。
public class ApplicationContextHolder implements ApplicationContextHoldable {
protected static ApplicationContext applicationContext = ...;
@Override
public ApplicationContext getApplicationContext() {
return ApplicationContextHolder.applicationContext;
}
}
不错。具有讽刺意味的是,一两件事,春天是擅长的就是管理单身,所以不应该有一个需要静态变量:)
可以使用基于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;
}
是的,但在现实世界中,你并不总是有这个选择:) – JamesC 2010-01-23 14:36:33