Невозможно проверить класс с помощью инъекции в поле (Guice) - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть класс с внедренным в него полем.

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 не завершена).Вопрос в том, как правильно ввести поле, а также смоделировать его в методе тестирования, чтобы изменить поведение?

...