我有一个要求,我必须调用抽象类的私有方法。
让我们说抽象类如下所示: -
public abstract class Base {
protected abstract String getName();
private String getHi(String v) {
return "Hi " + v;
}
}
有些人可以告诉我有没有办法可以拨打getHi
(可能是通过Reflection
或其他方式)以便我可以测试一下?我正在使用Junit 4.12
和Java 8
我已经完成了这个question,但这里的方法在抽象类中并不是私有的。
我也经历了这个question,即使这个也没有谈论抽象类中的私有方法。
我不是在问这里是否应该测试私有方法,或者测试私有方法的最佳策略是什么。网上有很多关于此的资源。我只是想问一下如何在java中调用抽象类的私有方法。
答案 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();
}