私人班级单元测试

时间:2013-08-29 09:37:29

标签: java unit-testing junit private

如何在java中对单元测试私有(表示包可见性)?

我有一个包,这个包中只有一个类是公共的,其他类是私有的。如何覆盖其他单元测试分类?我想在休息罐中加入单元测试。

3 个答案:

答案 0 :(得分:11)

在同一个包中创建单元测试类。

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

然后,测试类将位于同一个包com.example.MyPrivateClassTestCase中,并位于src/test/java/com/example/MyPrivateClassTestCase.java

答案 1 :(得分:3)

如@ Kowser的回答所示,测试可以在同一个包中。

在Eclipse中,我假设其他IDE,可以在不同的项目中使用类,但是在同一个包中。可以声明项目依赖于另一个项目,使其他项目的类可用。这允许一个单独的单元测试项目依赖于生产项目并遵循其包结构,但有自己的根目录。

该结构使测试代码与生产代码完全分开。

答案 2 :(得分: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);
    }
}