2014-10-08 49 views
0

我有一個公共外部類和私有內部類的場景。現在我想創建一個此私有內部類的對象,用於單元測試其中的方法。從其他類創建私有內部類的對象

public class MyOuterClass { 
    public MyOuterClass() { } 

    private class MyInnerClass { 
     public MyInnerClass() { } 
    } 
} 

這是我嘗試從其他測試類創建「MyInnerClass」對象的場景。我發現使用私有構造函數創建類的對象的解決方案,但這不是我所需要的。請幫我解決一下這個。 在此先感謝。

+0

你不應該需要單元測試私人內部類。那應該是告訴你你的課程設計是錯誤的(或者你的測試方法是錯誤的)。 – 2014-10-08 09:50:04

+1

類不能有'()' – Rustam 2014-10-08 09:53:04

回答

0

private對象的整個概念是它只能被它封裝的類訪問。你不能直接從另一個類創建一個私有對象的實例。

+0

如果是這樣,你如何在單元測試中實現100%的代碼覆蓋率,對於這種類型的代碼有反射訪問私人成員的方法,但我不知道如何做到這一點這種情況。 – user2786437 2014-10-08 10:34:08

1

你有三個選擇:

  1. 使內部類包私有(默認訪問級別,而不是),你可以把你的測試代碼在同一個包訪問它。

  2. 使用反射通過覆蓋訪問限制來訪問它。

  3. 反思你的建築。您可能需要直接測試私有內部類,但通常會測試外部類,通過這樣做也會測試內部類。

+0

對於點#1和#3(特別是#3)+1。選項#2是嚴峻的。 – 2014-10-08 09:58:04

+0

@Tim for using#3對於我的場景,內部類是擴展Handler的類,它重寫了句柄消息方法,除非創建了內部類的對象,否則不能直接調用它。 – user2786437 2014-10-08 10:38:02

+0

@tim,並且我們無法更改所有發生這種情況的訪問修飾符。所以我認爲使用反射會是更好的方法。你可以發佈一個示例代碼片段作爲IAM新的反思。 – user2786437 2014-10-08 10:39:18