我想在 junit 测试用例中使用私有内部类方法(方法是公共的)。是否可以?

我在私有静态内部类中有一个方法。我想在我的 junit 测试用例中访问这个方法。有可能吗?如果有的话怎么办?



忽然笑
浏览 103回答 2
2回答

阿波罗的战车

即使也可以使用Reflection访问方法privatestatic检查下面的示例以使用反射访问私有方法例子:package demo;public class Employee {&nbsp; &nbsp; private static class EmployeeInnerKlass {&nbsp; &nbsp; &nbsp; &nbsp; static void getText() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println("Employee.EmployeeInnerKlass.getText()");&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}class InnerKlass {&nbsp; &nbsp; static String getText() {&nbsp; &nbsp; &nbsp; &nbsp; return "Hello World";&nbsp; &nbsp; }}package demo;import java.lang.reflect.Method;import org.testng.annotations.Test;public class EmployeeTest {&nbsp; &nbsp; @Test&nbsp; &nbsp; public void accessPrivateMethods() throws Throwable {&nbsp; &nbsp; &nbsp; &nbsp; Class<?> klassEmployee = Class.forName("demo.Employee");&nbsp; &nbsp; &nbsp; &nbsp; Class<?> EmployeeInnerKlass = klassEmployee.getDeclaredClasses()[0];&nbsp; &nbsp; &nbsp; &nbsp; //To get the "EmployeeInnerKlass" declared class in the Employee Class&nbsp; &nbsp; &nbsp; &nbsp; Class<?> InnerKlass = Class.forName("demo.InnerKlass");&nbsp; &nbsp; &nbsp; &nbsp; Method method = EmployeeInnerKlass.getDeclaredMethod("getText", null);&nbsp; &nbsp; &nbsp; &nbsp; method.setAccessible(true);&nbsp; &nbsp; &nbsp; &nbsp; method.invoke(null, null);&nbsp; &nbsp; &nbsp; &nbsp; Method method2 = InnerKlass.getDeclaredMethod("getText", null);&nbsp; &nbsp; &nbsp; &nbsp; method2.setAccessible(true);&nbsp; &nbsp; &nbsp; &nbsp; method2.invoke(null, null);&nbsp; &nbsp; }}我用过 TestNG 只是将它更改为 JUnit 并使用它。

守候你守候我

我在私有静态内部类中有一个方法。我想在我的 junit 测试用例中访问这个方法。有可能吗?如果有的话怎么办?您可以做的最简单的事情是将静态成员类的可访问性从私有访问更改为包私有访问。这将允许您从您的 junit 测试类访问您的成员类的非私有成员(只要它被赋予相同的包标题)。进行此更改不会影响项目的导出 API;访问您的项目包的客户将看不到任何新方法或成员。当您对测试感到满意时,您可以简单地再次将静态成员类设为私有。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java