我正在使用带有依赖注入的spring,并在我的TestNG类中遇到了这段令人费解的代码,并想弄清楚这个问题
我有下面的代码
public class myBase {
@Autowired @Lazy @Qualifier("someInstanceA")
protected SomeClass someInstanceA;
.
.
}
public class myTestB extends myBase {
private String varB = someInstanceA.getVarB();
@Test
.
.
}
上面的代码在行中给了我NullPointerException
private String varB = someInstanceA.getVarB();
但是当我在下面这样做时
public class myTestB extends myBase {
private String varB;
@BeforeClass
private void getVarB() {
varB = someInstanceA.getVarB();
}
@Test
.
.
}
测试运行良好。我读到BeforeClass就像一个默认构造函数,并且渴望初始化类似于使用默认构造函数初始化变量。我在这里想念什么?
最佳答案
简短答案:Bean注入发生在创建类实例之后。
由于在创建myTestB
(顺便说一句,应以大写开头)时,您在尚未注入的getVarB
上调用someInstanceA
,因此得到了NullPointerException
。
第二种情况有效,因为@BeforeClass
在对象创建后的第一次测试运行之前运行了一次。因此,当在someInstanceA#getVarB
方法中调用getVarB
时,someInstanceA
已经自动连接并且不能为null。