[英]How to mock enum singleton with jmockit?
我依赖于枚举 singleton class 之类的
public enum SingletonObject {
INSTANCE;
SingletonObject() {
// some annoying initialization
}
public callDB() {
this.num = num;
}
}
我正在尝试测试 class 之类的
public class MyClass {
public void doSomething() {
// some code
SingletonObject.INSTANCE.callDB();
}
}
按照这个答案,我尝试使用以下代码简单地测试模拟,但我似乎遇到了枚举调用其构造函数的问题
public class MyClassTest {
@Mocked
private SingletonObject singleton;
@Before
public void setup() {
Deencapsulation.setField(SingletonObject.class, "INSTANCE", singleton);
}
@Test
public void test() {
assertSame(singleton, SingletonObject.INSTANCE);
}
}
使用接口似乎有点前途,但我怀疑这是否是解决这个问题的最佳方法。
看起来PowerMockito 也很有希望,但出于各种原因,我想将其保存为最后的手段。
那么如何在不调用它的构造函数的情况下模拟这个枚举 singleton 呢?
尝试这样的事情。 这将创建一个“MyClass”的部分模拟和一个模拟 SingletonObject,调用 MyClass 的(真实)doSomething 方法,并确认 SingletonObject 的(模拟)callDB() 方法被它调用一次。
@Test
public void testdoSomething(
@Mocked final SingletonObject singleton)
{
final MyClass clz = new MyClass();
new Expectations(clz)
{
{
SingletonObject.INSTANCE.callDB();
times = 1;
}
};
clz.doSomething();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.