2013-12-17 23 views
0

有沒有辦法來調用一個枚舉的單例的私有靜態方法?例如,假設我有我需要測試它具有以下結構中的一些遺留代碼:如何在java中調用單例(Enum樣式)的私有方法?

public enum Singleton { 

    INSTANCE; 

    private static double methodToTest() { 
     return 1.0; 
    }  

    public static String extremelyComplexMethod() { 
     methodToTest(); 
     //Imagine lots more complex code here 
     return ""; 
    } 
} 

我將如何去創造,在隔離測試methodToTest一類?我試過使用Whitebox(包含在PowerMock中)的反射,但我沒有運氣。有沒有辦法做到這一點?

我知道直接測試私有方法並不是首選的方法,但我想知道是否可以直接測試私有方法。我試圖讓代碼被識別爲java,但我沒有成功。

+0

可能重複:http://stackoverflow.com/questions/34571/whats-the-the-way-to-test-a-class-with-private-methods-using-junit – bobbel

+0

區別在於它是一個枚舉。我已經嘗試過使用Whitebox以與我爲類的私有靜態方法所做的相同的方式來執行此操作,但我沒有取得成功。 – HardcoreBro

+1

問題是,在類中或枚舉中調用私有靜態方法並沒有真正的區別!所以,如果你在類中找到一種調用私有靜態方法的方法,這也應該適用於枚舉。 – bobbel

回答

0

我能夠調用的方法試試這個下面的代碼

@RunWith(PowerMockRunner.class) 
@PrepareForTest(Singleton.class) 
public class MySingletonTest { 
    @Test 
    public void test() throws Exception{ 
     Whitebox.invokeMethod(Singleton.class, "methodToTest"); 
    } 
} 

不要忘記添加Singleton類中PrepareForTest