У меня есть этот интерфейс сервисаКак поиздеваться в @Inject интерфейс
public interface ABC {
public String getAbc();
}
И у меня есть этот контроллер, который использует эту службу
public class Do {
@Inject ABC abc;
public String doAbc() {
String a = abc.getAbc();
}
}
В моей тестовой единицы, я хочу, чтобы иметь возможность издеваться вне этого ABC и не должны обеспечивать фактическую реализацию. Вот что работает:
public class TestDo {
@Mock
private Do do;
@Mock
private ABC abc;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
do.abc = abc;
}
@Test
public void testDo() {
when(do.doAbc()).thenCallRealMethod();
do.doAbc();
assertSomething...
}
}
Но то, что я не хочу делать это do.abc = abc;
, от всех моих поисков, чтобы сделать @InjectMock, необходимо предоставить конкретный класс. Есть ли способ для меня использовать интерфейс, но в то же время он способен внедрить насмешливый интерфейс без необходимости раскрывать мой ABC-инъект в Do Class? Я хочу сделать ABC частной переменной и все еще в состоянии ввести интерфейс через Mockito.
Я уже пробовал это. Но do.abc имеет значение null, когда я это делаю. – Churk
@Churk, протестировал его с помощью Mockito 1.9.5, JDK 1.8. Все работает. Я обновлю свой ответ на полный рабочий код. – Rustam
Я перечитываю ваш код. Моя ошибка заключалась в том, что у меня был/@ InjectMocks на том, что эквивалентно ABC на моем фактическом коде, поэтому он пытался создать экземпляр интерфейса, который меня отбрасывал. И имел/@ Mock на том, что эквивалентно Do, поэтому мой издевательский и injectMocking был назад. – Churk