2015-02-05 62 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(){...} 
}