我想模拟一个在其单元测试期间在其构造函数中加载bean的类的实例。问题是Spring在测试期间没有活动。
我的代码是:
public class foo{ //the tested class
ObjectA oa;
public foo(){
oa = SpringService.EnumInstance.LoadOa(); //uses spring to load oa
}
}
public ObjectA{ //that is an enum
ENUM_INSTANCE;
void func1(){...}
int func2(){...}
}
public SpringService{
EnumInstance;
ObjectA LoadObjectA(){
...
}
}
如果可以的话,我会更改
行oa = SpringService.EnumInstance.LoadOa();
带
oa = new ObjectA();
我该如何绕过它?
答案 0 :(得分:2)
您可以执行以下操作:
public class foo{
ObjectA oa;
public foo(){
oa = SpringService.EnumInstance.LoadOa(); //uses spring to load oa
}
//package private constructor only used in unit test
foo(ObjectA oa) {
this.oa = oa;
}
}
有些人不会对这个解决方案感到满意,因为你只是为了测试目的而改变一个测试对象,但是当严重的重构是不可能的时候,你无能为力。