为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

忽然笑 2023-05-24 15:16:23
我在私有静态内部类中有一个方法。我想在我的 junit 测试用例中访问这个方法。有可能吗?如果有的话怎么办?
查看完整描述

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


查看完整回答
反对 回复 2023-05-24
?
守候你守候我

TA贡献1802条经验 获得超10个赞

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

您可以做的最简单的事情是将静态成员类的可访问性从私有访问更改为包私有访问。

这将允许您从您的 junit 测试类访问您的成员类的非私有成员(只要它被赋予相同的包标题)。进行此更改不会影响项目的导出 API;访问您的项目包的客户将看不到任何新方法或成员。

当您对测试感到满意时,您可以简单地再次将静态成员类设为私有。


查看完整回答
反对 回复 2023-05-24
  • 2 回答
  • 0 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信