2016-11-10 5 views
1

Я использую mockito для издевательства над моими услугами.Как вводить макет в родительский класс с помощью Mockito?

Как я могу вводить mocks в родительский класс?

Пример:

public abstract class Parent(){ 

    @Mock 
    Message message; 

} 

public class MyTest() extends Parent{ 

    @InjectMocks 
    MyService myService //MyService has an instance of Message 

    //When I put @Mock Message here it works 
} 

Когда я запускаю мои тесты сообщение в Parent пребывания null

+0

mocks можно вводить через конструктор. если делать DI, тогда архитектура классов для получения зависимостей через инъекцию конструктора – Nkosi

+0

Какую версию mockito вы используете? – SpaceTrucker

+0

Версия, которую я использую: 1.10.19 – Lucas

ответ

1

Два пути решения этого:

1) Вы должны использовать MockitoAnnotations.initMocks(this) в методе @Before в ваш родительский класс.

следующие работы для меня:

public abstract class Parent { 
    @Mock 
    Message message; 

    @Before 
    public void initMocks() { 
     MockitoAnnotations.initMocks(this); 
    } 
} 

public class MyTest extends Parent { 
    @InjectMocks 
    MyService myService = new MyService(); //MyService has an instance of Message 
    ... 
} 

2) Если хотите использовать @RunWith(MockitoJUnitRunner.class) выше определение класса, то это должно быть сделано в классе Parent:

@RunWith(MockitoJUnitRunner.class) 
public class Parent { 
... 

Обратите внимание, что объявление @Mock в классе Parent и MyTest приведет к тому, что введенный объект будет иметь значение NULL. Поэтому вам нужно будет выбрать, где вы хотите объявить об этом.

+0

Оба работали для меня .. спасибо – Lucas

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