如何使用jmock模拟Java中的静态变量
-
21-09-2019 - |
题
我有一个单元测试问题,其中一类具有想要加载Spring应用程序CTX的静态变量。
这堂课不是从豆厂出来的,我无法改变这一事实。
static ApplicationContext applicationContext = ...;
这很好,但是很难 jmock, ,或者至少我不知道,直到我可以春季CTX想要启动。对于单位测试情况并不理想。
是否有任何人知道的工作?我可以选择将静态变量更改为我想要的任何东西。
谢谢。
解决方案
我自己解决了。
最终真的很简单。 Justed需要将我的静态包裹在课堂上,然后我可以嘲笑。
public class ApplicationContextHolder implements ApplicationContextHoldable {
protected static ApplicationContext applicationContext = ...;
@Override
public ApplicationContext getApplicationContext() {
return ApplicationContextHolder.applicationContext;
}
}
其他提示
好的。具有讽刺意味的是,春天擅长的一件事是管理单身人士,因此不需要静态变量:)
您可以使用基于反射的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;
}
不隶属于 StackOverflow