所以我有一个简单的java类:
@Component
public class IWantToTestThisClass {
@Autowired
private ClassA classA;
@Autowired
private ClassB classB;
public ObjectA doIt(...) {
classB.returnObject();
}ClassA包含:
@Component
public class ClassA {
@Autowired
private ClassB classB;
public ObjectA doIt() {
classB.returnObject(...);
}ClassB:
@Component
public class ClassB {
public ObjectA returnObject(...) {
...
}我的测试设置如下所示:
@InjectMocks
private IWantToTestThisClass iWantToTestThisClass;
@Mock
private ClassA classA;
@Mock
private ClassB classB;
@Before
public void setUp() {
initMocks(this);
when(classA.doSmt()).thenCallRealMethod();
when(classB.doSmt()).thenCallRealMethod();
}问题是没有为ClassA注入ClassB。
然后通过classA调用returnObject(ClassB),它返回NullPointerException(ClassB不是模拟/注入的)。
如果通过IWantToTestThisClass调用returnObject(classB),这是可以的。
这是一种同时为两个类注入ClassB的方法吗?我想调用真正的方法,而不是模拟的方法。
发布于 2018-07-28 02:00:26
可以用构造函数inject替换@Autowired。因此,您的classA将为:
@Component
public class ClassA {
private static ClassB classB;
public ClassA(ClassB classB){
this.classB=classB;
}
public ObjectA doIt() {
classB.returnObject(...);
}
}通过这种方式,您可以稍后在您的@ setUp方法中注入classB模拟:
@Before
public void setUp() {
initMocks(this);
when(classA.doSmt()).thenCallRealMethod();
when(classB.doSmt()).thenCallRealMethod();
classB = new classB(classA);
}https://stackoverflow.com/questions/40221323
复制相似问题