2016-10-24 108 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的