java - 如何对Java中的私有(具有包可见性)进行单元测试?
我有一个包,这个包中只有一个类是公共的,其他类是私有的。如何用单元测试覆盖其他类?我想在 resting jar 中包含单元测试。
java - 如何对Java中的私有(具有包可见性)进行单元测试?
我有一个包,这个包中只有一个类是公共的,其他类是私有的。如何用单元测试覆盖其他类?我想在 resting jar 中包含单元测试。
在同一个包中创建单元测试类。
例如,如果com.example.MyPrivateClass
位于src/main/java/com/example/MyPrivateClass.java
然后测试类将在同一个包中com.example.MyPrivateClassTestCase
,并将位于src/test/java/com/example/MyPrivateClassTestCase.java
有两种方法可以做到这一点。
标准方法是在要测试的类的同一包中定义您的测试类。这应该很容易完成,因为现代 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);
}
}
如@Kowser 的回答所示,测试可以在同一个包中。
在 Eclipse 中,我假设其他 IDE,一个可以在不同项目中但在同一个包中的类。可以将一个项目声明为依赖于另一个项目,从而使另一个项目的类可用。这允许一个单独的单元测试项目依赖于生产项目并遵循其包结构,但有自己的根目录。
该结构使测试代码与生产代码完全分离。