2013-08-29 96 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); 
    } 
}