2 回答
TA贡献1862条经验 获得超6个赞
即使也可以使用Reflection访问方法privatestatic
检查下面的示例以使用反射访问私有方法
例子:
package demo;
public class Employee {
private static class EmployeeInnerKlass {
static void getText() {
System.out.println("Employee.EmployeeInnerKlass.getText()");
}
}
}
class InnerKlass {
static String getText() {
return "Hello World";
}
}
package demo;
import java.lang.reflect.Method;
import org.testng.annotations.Test;
public class EmployeeTest {
@Test
public void accessPrivateMethods() throws Throwable {
Class<?> klassEmployee = Class.forName("demo.Employee");
Class<?> EmployeeInnerKlass = klassEmployee.getDeclaredClasses()[0];
//To get the "EmployeeInnerKlass" declared class in the Employee Class
Class<?> InnerKlass = Class.forName("demo.InnerKlass");
Method method = EmployeeInnerKlass.getDeclaredMethod("getText", null);
method.setAccessible(true);
method.invoke(null, null);
Method method2 = InnerKlass.getDeclaredMethod("getText", null);
method2.setAccessible(true);
method2.invoke(null, null);
}
}
我用过 TestNG 只是将它更改为 JUnit 并使用它。
TA贡献1802条经验 获得超10个赞
我在私有静态内部类中有一个方法。我想在我的 junit 测试用例中访问这个方法。有可能吗?如果有的话怎么办?
您可以做的最简单的事情是将静态成员类的可访问性从私有访问更改为包私有访问。
这将允许您从您的 junit 测试类访问您的成员类的非私有成员(只要它被赋予相同的包标题)。进行此更改不会影响项目的导出 API;访问您的项目包的客户将看不到任何新方法或成员。
当您对测试感到满意时,您可以简单地再次将静态成员类设为私有。
添加回答
举报