我不确定如何模拟枚举单例类。
public enum SingletonObject{
INSTANCE;
private int num;
protected setNum(int num) {
this.num = num;
}
public int getNum() {
return num;
}
我想在上面的示例中对 getNum() 进行存根,但我不知道如何模拟实际的 SingletonObject 类。我认为使用 Powermock 准备测试会有所帮助,因为枚举本质上是最终的。
//... rest of test code
@Test
public void test() {
PowerMockito.mock(SingletonObject.class);
when(SingletonObject.INSTANCE.getNum()).thenReturn(1); //does not work
}
这是使用 PowerMockMockito 1.4.10 和 Mockito 1.8.5。
原文由 Sonwright Gomez 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您想清除 INSTANCE 返回的内容,您可以这样做,但它有点讨厌(使用反射和字节码操作)。我使用 PowerMock 1.4.12 / Mockito 1.9.0 创建并测试了一个包含三个类的简单项目。所有课程都在同一个包中。
单例对象.java
单例消费者.java
SingletonConsumerTest.java
对 --- 的调用将
INSTANCE
Whitebox.setInternalState
替换为您可以在测试中操作的模拟对象。