7

java - 如何对Java中的私有(具有包可见性)进行单元测试?

我有一个包,这个包中只有一个类是公共的,其他类是私有的。如何用单元测试覆盖其他类?我想在 resting jar 中包含单元测试。

4

3 回答 3

13

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

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

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

于 2013-08-29T09:38:31.690 回答
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);
    }
}
于 2013-08-30T13:08:06.797 回答
3

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

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

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

于 2013-08-29T10:10:18.230 回答