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

标签 java junit

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

最佳答案

即使static也可以使用Reflection来访问private方法

检查下面的示例以使用反射访问私有(private)方法

示例:

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并使用即可。

关于java - 我想在 junit 测试用例中使用私有(private)内部类方法(方法是公共(public)的)。是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57395067/

相关文章:

java - mockito 中的部分模拟 - 强制方法进入异常并继续

java - 我可以使用 jUnit 更改测试类的执行顺序吗?

java - 用于模拟变化很大的假模型的良好单元测试实践是什么?

java - 使用 Ant 运行多个 JUnit 测试

c# - 将.net格式字符串转换为java格式字符串

intellij-idea - 运行 IntelliJ 测试时出现 IntelliJ NoClassDefFoundError

java - 永久缓存文件直到修改的 HTTP header

java - 如何通过 java HTTP 请求访问 FDF

java - 在 Intellij 中打开 Nullable 警告

java - 读取 prop 文件 bean 错误