java如何用jmockit模拟枚举单例?
我依赖于enum单例类,比如
public enum SingletonObject {
INSTANCE;
SingletonObject() {
// some annoying initialization
}
public callDB() {
this.num = num;
}
}
我想考一门课,比如
public class MyClass {
public void doSomething() {
// some code
SingletonObject.INSTANCE.callDB();
}
}
在this answer之后,我尝试用下面的代码简单地测试mock,但我似乎遇到了enum调用其构造函数的问题
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);
}
}
Using an interface似乎有点前途,但我怀疑这是否是解决这个问题的最佳方式
它看起来也像PowerMockito is promising,但出于各种原因,我想把它作为最后的手段
那么,如何在不调用其构造函数的情况下模拟这个枚举单例呢
# 1 楼答案
试试这样。这将创建“MyClass”的部分模拟和模拟SingletonObject,调用MyClass的(real)doSomething方法,并确认SingletonObject的(mock)callDB()方法被它精确调用一次