调用抽象类的私有方法

时间:2016-05-16 11:31:24

标签: java junit junit4

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

让我们说抽象类如下所示: -

public abstract class Base {

    protected abstract String getName();

    private String getHi(String v) {
        return "Hi " + v;
    }
}

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

我已经完成了这个question,但这里的方法在抽象类中并不是私有的。

我也经历了这个question,即使这个也没有谈论抽象类中的私有方法。

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

1 个答案:

答案 0 :(得分:2)

我能够调用抽象类的私有方法,如下所示: -

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

public class Child extends Base {
  protected String getName() {
     return "Hello World";
  }
}

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

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();
    }