2013-08-29 98 views
5

如何在java中對私人課程進行單元測試(意味着包裝可視性)?私人課堂單元測試

我有一個包,只有一個類在這個包中是公共的,其他類是私有的。如何涵蓋其他與單元測試分類?我想將單元測試包括在休息罐中。

+0

是他們私人或包專用?如果它們是私有包,那麼你可以像其他任何類一樣測試它們,只要你的測試在同一個包中(它們應該); ... – assylias

回答

9

在同一個包中創建單元測試類。

例如,如果位於src/main/java/com/example/MyPrivateClass.java

com.example.MyPrivateClass然後測試類會在同一個包com.example.MyPrivateClassTestCase,將位於src/test/java/com/example/MyPrivateClassTestCase.java

2

正如@ Kowser的回答表明,該測試可以在同一包。在Eclipse中,我假設其他IDE,可以在不同的項目中使用類,但在同一個包中。可以聲明一個項目依賴於另一個項目,使其他項目的類可用。這允許一個獨立的單元測試項目,該項目依賴於生產項目並遵循其包結構,但具有其自己的根目錄。

該結構保持測試代碼與生產代碼完全分離。

3

有兩種方法可以做到這一點。

標準方法是在要測試的類的相同包中定義您的測試類。這應該很容易完成,因爲現代IDE在默認測試的類的相同包中生成測試用例。

非標準但非常有用的方法是使用反射。這使您可以將私有方法定義爲真正的「私有」,而不是「私有包」。例如,如果你有課。

class MyClass { 
    private Boolean methodToBeTested(String argument) { 
     ........ 
    } 
} 

你可以有你這樣的測試方法:

class MyTestClass { 

    @Test 
    public void testMethod() { 
     Method method = MyClass.class.getDeclaredMethod("methodToBeTested", String.class); 
     method.setAccessible(true); 
     Boolean result = (Boolean)method.invoke(new MyClass(), "test parameter"); 

     Assert.assertTrue(result); 
    } 
}