2012-11-02 92 views
7

我試圖用一些私有類來測試一個類(是的,我知道這通常被認爲是可測試性差的實踐,但這個問題不是關於設計原則的)。我班會是這個樣子:PowerMock可以爲測試用例實例化一個內部類嗎?

public class EnclosingClass { 
    . 
    . 
    . 
    private class InnerClass implements InnerClassType { 
    public InnerClass(){ /* do stuff */} 
    public int InnerClassMethod(); 
    } 
} 
  • InnerClassType是一個公共接口

我試着做實例與powermock類:

Class clazz = Whitebox.getInnerClassType(EnclosingClass.class, "InnerClass"); 
Constructor constructor = Whitebox.getConstructor(clazz, null); 
InnerClassType innerClass = (InnerClassType) constructor.newInstance(null); 

,也:

Class clazz = Whitebox.getInnerClassType(EnclosingClass.class, "InnerClass"); 
InnerClassType innerClass = (InnerClassType) Whitebox.invokeConstructor(clazz); 

但是,在兩次嘗試中,我得到一個ConstructorNotFoundException

是否有可能實例化這些內部類?如果是這樣,我哪裏錯了?

回答

6

你應該能夠通過以下MODS的移動過去你ConstructorNotFoundExeception你的第一個工作:

Class clazz = Whitebox.getInnerClassType(EnclosingClass.class, "InnerClass"); 
Constructor constructor = Whitebox.getConstructor(clazz, EnclosingClass.class); 
InnerClassType innerClass = (InnerClassType) constructor.newInstance(new EnclosingClass()); 

因爲你的內部類也不是一成不變的,它含蓄地期待一個「本」從外部類的參考。使用這種方法,看起來像你必須弄清楚它。

+0

完美地工作 - 確保清理我的單元測試了一堆! – JoshC13

+0

鑑於InnerClass是私人的,你如何獲得InnerClassType? –

相關問題