Как смоделировать поле в суперклассе с помощью Mockito? - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть MyClass, в котором есть поле MyService myService.

Теперь я тестирую класс, расширяя его. т.е. MyClassTest extends MyClass.

У меня вопрос, как мне сказать, чтобы Мокито издевался myService?

Спасибо

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Вы можете смоделировать сервис, как показано ниже.

Это импорт, который вы должны иметь

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

Вот тест

MyClass myClass = new MyClass();

// Mock the service
MyService myService = mock(MyService.class);
// Write the behavior of the mocked service.
when(myService.myMethod()).thenReturn(someOutputObjectThatShouldBeReturned)

// Set the mocked service to your class.
Whitebox.setInternalState(myClass, "myService", myService)
1 голос
/ 08 апреля 2019

Если это поле недоступно извне, у вас есть два варианта: отражение и ... отражение.

Пример 1: использование org.mockito.internal.util.reflection.FieldSetter.

MyClass m = new MyClass();
FieldSetter.setField(m, m.getClass().getDeclaredField("myService"), yourService);

Пример 2:стандартное отражение Java:

MyClass m = new MyClass();
Field f = m.getClass().getDeclaredField("myService");
f.setAccessible(true);
f.set(m, yourService);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...