在尝试编写测试用例时会出现这个问题. Foo是框架库中的一个类,我没有源代码访问权限.
public class Foo{
public final Object getX(){
...
}
}
我的申请会
public class Bar extends Foo{
public int process(){
Object value = getX();
...
}
}
由于其他依赖性,我无法创建Foo对象,因此单元测试用例无法初始化.当值为null时,BarTest抛出空指针.
public class BarTest extends TestCase{
public testProcess(){
Bar bar = new Bar();
int result = bar.process();
...
}
}
有没有办法可以使用反射api将getX()设置为非final?或者我该如何进行测试?
解决方法:
您可以创建另一个可以在测试中覆盖的方法:
public class Bar extends Foo {
protected Object doGetX() {
return getX();
}
public int process(){
Object value = doGetX();
...
}
}
那么,你可以在BarTest中覆盖doGetX.
标签:java,reflection,methods,final
来源: https://codeday.me/bug/20190930/1836549.html