У меня есть класс с внедренным в него полем.
public class MyClass {
@Inject
DaoA daoA;
public void foo() {
Injector injector = Guice.createInjector(new DAOModule());
injector.injectMembers(this);
daoA.findEntities(); // works fine
}
}
Я хочу издеваться над поведением daoA.findEntities()
, поэтому я издеваюсь над DaoA в тестовом классе, как показано ниже:
@RunWith(PowerMockRunner.class)
public void MyClassTest {
@InjectMocks
MyClass myClass;
@Mock
Dao daoA;
@Test
public void test() {
PowerMockito.doReturn(Collections.emptyList()).when(daoA).findEntities();
myClass.foo(); // makes a real call while I expect a mock
}
}
Тем не менее, я не вижу смоделированного поведения при запуске этого метода тестирования (вызывается реальный метод).Я полагаю, что injector.injectMembers(this);
отменяет ложную инъекцию.Когда я комментирую эту инъекцию на MyClass
, тогда тестовый метод работает, как и ожидалось, но на этот раз фактический foo () прерывается (так как он выдает NPE, так как инъекция daoA не завершена).Вопрос в том, как правильно ввести поле, а также смоделировать его в методе тестирования, чтобы изменить поведение?