【发布时间】:2020-02-18 22:21:30
【问题描述】:
A)
Class Parent4{
private I18nUtils i18n;
//-----------Here Nullpointerexception occur----------------
public Parent4(){
SetText(i18n.getText("HELLO");
}
}
B)
Class Parent3 extends Parent4{
private I18nUtils i18n;
}
C)
Class ParentParent2 extends Parent3{
private I18nUtils i18n;
}
D)
Class Parent extends ParentParent2{
private I18nUtils i18n;
}
E)
Class Child extends Parent{
protected method_name(){
//.......DO Something......
}
}
My Test Class:
public testclass{
Class cls = Class.forName("Child");
Object obj = cls.newInstance();
Method method = cls.getDeclaredMethod("method_name",Null);
method.setAccessible(true);
method.invoke(obj, null);
因此,在创建子类的对象时,它调用并调用子类的所有依赖项并使用模拟对象进行初始化,并调用所有父类及其构造函数。
虽然 i18n 默认设置为 null。 1)我试图通过反射访问。在 superClass().getDeclared("i18n") 的帮助下。但最终它只能访问它的前一个类而已。所以它没有设置 Parent5() 类的值。
2) 我也尝试直接访问 Parent5 类 i18n 字段。 但是在调用子类时。它将创建新实例,并且将 parent5() 类 i18n 重置为 null。
【问题讨论】:
-
我不明白。您能否提供一个真正的功能齐全的核心示例来显示故障并给出完整的堆栈跟踪和发生故障的行?
-
我正在使用简单的模拟编写一个测试用例,但我想测试的方法调用了超类方法,该方法在我的子类中也被覆盖。我想接近一个在另一种方法中取出对超类方法的调用,然后模拟这个方法而不是部分模拟。任何人都可以建议该方法是否正确,或者是否有更好的出路,或者 Easy Mock api 中已经存在一些东西来处理这种情况。
-
从很多天开始,我都在互联网上进行同样的调查。我了解了我的一些问题。这个问题被称为“easymock-override-an-object-creation”。 (stackoverflow.com/questions/38180541/…).. 当我看干净代码谈话系列的视频时。他们谈论的是“深度继承层次结构”的同一个问题。
标签: java unit-testing nullpointerexception superclass easymock