2017-09-01 57 views
1

默認的方法實現我有休耕類:凡測試超

Parent.java

interface Parent{ 
    void method1(); 

    default void method2(){ 
     //some default impl 
    } 
} 

ChildOne.java

class ChildOne implements Parent{ 
    @Override 
    void method1(){ 
     //ChildOne specific implementation 
    } 
} 

ChildTwo.java

class ChildTwo implements Parent{ 
    @Override 
    void method1(){ 
     //ChildTwo specific implementation 
    } 
} 

問題是:我在哪裏應該把方法2測試?我知道單元測試我應該測試具體的實現,所以ChildOne和ChildTwo,但是當我有相同的method2實現時,我不想重複我的測試。然而,把它放到這些類中的一箇中似乎也不是很好。

Ofc,問題與抽象類的默認實現相同,而不是接口。

+2

那麼,通過在測試中創建一個自定義子類實例,創建一個ParentTest類,並在那裏編寫測試,該測試允許測試默認方法。 –

+2

@JBNizet說什麼。創建一個'Parent'的測試,該測試使用'private'實現來測試,這樣你就可以保證你正在測試'Parent#method2'的行爲,而不是其他任何東西。 –

+0

所以很明顯...爲什麼我沒有考慮這個......夥計們,從你的評論中創建一個答案。我會在接下來的8分鐘內接受它 – ilovkatie

回答

4

您可以創建一個ParentTest類,然後在測試中寫入您的測試,方法是在測試中創建一個自定義子類實例(測試專用),以允許測試默認方法。