2016-10-24 2 views
-1
을 위해 주입하지

그래서 간단한 자바 클래스가 있습니다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(); 
} 

문제는 ClassA에 대해 ClassB가 주입되지 않는다는 것입니다.

returnObject (ClassB)가 classA를 통해 호출되면 NullPointerException을 반환합니다 (ClassB는 조롱되거나 삽입되지 않습니다).

IWantToTestThisClass를 통해 returnObject (classB)가 호출되면 괜찮습니다.

두 클래스의 ClassB를 동시에 주입 할 수 있습니까? 나는 조롱 한 것이 아니라 진짜 방법을 부르고 싶습니다.

+0

에 세터 setClassB (...)를 추가 할 경우 [mcve] 주시기 바랍니다. –

+0

나는 그것이 NullPointerException이며, 왜 그것을 얻는 지 알고있다. :) – Laurynas

+0

전체 테스트 클래스를 업데이트 할 수 있습니까 – kuhajeyan

답변

0

모의를 IWantToTestThisClass에 주입하고 ClassA에 주입하지 않습니다. ClassA에 모의가 없으므로 B가 주입되지 않습니다.

봅니다를 ClassA

전에 @InjectMocks를 추가하거나 당신이 할 수 있습니다 :

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

당신이를 ClassA

관련 문제