调用抽象类的私有方法

tuk*_*tuk 6 java junit junit4

我有一个要求,我必须调用抽象类的私有方法.

假设抽象类如下所示: -

public abstract class Base {

    protected abstract String getName();

    private String getHi(String v) {
        return "Hi " + v;
    }
}
Run Code Online (Sandbox Code Playgroud)

有些人可以告诉我有没有办法可以打电话getHi(可能是通过Reflection或其他方式),以便我可以测试出来?我正在使用Junit 4.12Java 8

我已经解决了这个问题,但这里的方法在抽象类中并不是私有的.

我也经历过这个问题,即使这个问题也没有谈到抽象类中的私有方法.

我不是在这里问我们是否应该测试私有方法或者测试私有方法的最佳策略是什么.网上有很多关于此的资源.我只是想问一下如何在java中调用抽象类的私有方法.

tuk*_*tuk 4

我可以按如下方式调用抽象类的私有方法:-

假设我有一个扩展抽象基类的类:-

public class Child extends Base {
  protected String getName() {
     return "Hello World";
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我可以调用私有方法,如下所示:-

Child child = new Child();
try {
        Method method = Base.class.getDeclaredMethod("getHi", String.class);
        method.setAccessible(true);
        String output = (String) method.invoke(child, "Tuk");
        System.out.println(output);
    } catch (Exception e) {
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)