2015-02-05 26 views
0

有一个类X;模拟静态枚举内部最终类

public final class X { 
    private X() {} 
    ... 
    public static enum E { 
     thingA("1"), 
     thingB("0") 

     public boolean isEnabled(){...} 
    } 
    ... 
} 
在一些其他类

有一个方法M.

public class AnotherClass{ 

    public void M(){ 
     if (E.thingB.isEnabled()) { 
      doSomething(); 
     } 
    } 
    ... 
} 

我想测试M法,是可以使用的Mockito/powermockito到 模拟语句中如果。做这样的事情

when(E.thingB.isEnabled()).thenReturn(true)? 
+0

你自己尝试过吗? – 2015-02-05 17:02:14

回答

1

不管是否枚举嵌套与否,你不能创建或嘲笑的枚举的新实例。 Enums are implicitly final,更重要的是,它打破了枚举的所有实例都在枚举中声明的假设。

枚举类型没有其他的实例不是由它的枚举常量定义的实例。尝试显式实例化枚举类型是编译时错误。 (JLS

由于枚举的所有实例是在编译时已知的,这些实例的所有属性同样可以预测,通常你可以通过在没有任何嘲讽匹配您的需求的实例。如果你想接受这些属性的任意实例,请让你的枚举实现一个接口。

public interface I { 
    boolean isEnabled(); 
} 

public enum E implements I { // By the way, all enums are necessarily static. 
    thingA("1"), 
    thingB("0"); 

    public boolean isEnabled(){...} 
}