如何在java中对单元测试私有(表示包可见性)?
我有一个包,这个包中只有一个类是公共的,其他类是私有的。如何覆盖其他单元测试分类?我想在休息罐中加入单元测试。
答案 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);
}
}