所以我有一个简单的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();
}
问题是ClassB没有注入ClassA。
然后通过classA调用returnObject(ClassB),它返回NullPointerException(ClassB不被模拟/注入)。
如果通过IWantToTestThisClass调用returnObject(classB),那就没关系。
这是同时为两个类注入ClassB的方法吗?我想称实际方法,而不是模拟方法。
答案 0 :(得分:0)
您将模拟注入IWantToTestThisClass,而不是注入ClassA。所以没有模拟到ClassA,B没有注入那里。
尝试在classA
之前添加@InjectMocks或者你可以这样做:
Button
如果将setter setClassB(...)添加到ClassA
答案 1 :(得分:0)
@Autowired可以由构造函数注入替换。因此,您的classA将是:
def merge(c,b,m,e):
i = b,j = m+1
l=[]
while (i<=m) and (j<=e):
if (c[i] < c[j]):
l.append(c[i])
else:
l.append(c[j])
if (i<=m):
while (i<=m):
l.append(c[i])
else:
while(j<=e):
l.append(c[j])
for i1 in l:
print(l[i1])
def merge_sort(collection,beg,end):
if(beg<end):
mid=(beg+end)//2
merge_sort(collection,beg,mid)
merge_sort(collection,mid+1,end)
merge(collection,beg,mid,end)
#return collection
if __name__ == '__main__':
user_input = input('Enter numbers separated by a comma:\n').strip()
unsorted = [int(i) for i in user_input.split(',')]
l = len (unsorted)
merge_sort(unsorted,0,l)
通过这种方式,您可以稍后在@Before setUp方法中注入classB模拟:
@Component
public class ClassA {
private static ClassB classB;
public ClassA(ClassB classB){
this.classB=classB;
}
public ObjectA doIt() {
classB.returnObject(...);
}
}