2016-10-24 39 views
-1

所以我有一個簡單的Java類:的Mockito:注射模擬類沒有注入其他類

@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注入的。

然後returnObject(ClassB)通過classA調用,它返回NullPointerException(ClassB未被模擬/注入)。

如果returnObject(classB)通過IWantToTestThisClass被調用,那沒問題。

這是一種爲兩個類同時注入ClassB的方法嗎?我想調用真正的方法,而不是嘲弄的方法。

+0

請提供[MCVE。 –

+0

我知道這是NullPointerException,爲什麼我得到它。 :) – Laurynas

+0

你能不能更新你的完整測試課 – kuhajeyan

回答

0

您正在將模擬注入到IWantToTestThisClass中,而不是注入到ClassA中。所以沒有模擬進入ClassA,B沒有被注入到那裏。

嘗試CLASSA

前加@InjectMocks或者,你可以這樣做:

ClassB mB = Mockito.mock(ClassB.class); 
classA.setClassB(mB); 

如果添加的setter setClassB(...)到ClassA的