2016-10-24 2 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) вызывается через класс A, он возвращает исключение NullPointerException (класс B не издевается/не вводится).

Если returnObject (класс B) вызывается через IWantToTestThisClass, это нормально.

Можно ли вводить ClassB для обоих классов одновременно? Я хочу назвать реальные методы, а не издеваться над ними.

+0

Пожалуйста обеспечивают [mcve]. –

+0

Я знаю, что это NullPointerException и почему я его получаю. :) – Laurynas

+0

Можете ли вы обновить свой полный тестовый класс – kuhajeyan

ответ

0

Вы вводите ложный ввод в IWantToTestThisClass, а не в ClassA. Таким образом, в ClassA нет никакого издевательства, и B там не вводится.

Попробуйте добавить @InjectMocks перед тем CLASSA

Или вы можете сделать:

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

если добавить сеттер setClassB (...) в ClassA

Смежные вопросы