Как протестировать реализации Guice AbstractModule?

Как протестировать реализации Guice AbstractModule в большом проекте без создания поддельных реализаций? Можно ли протестировать методы bind() и inject ()?

1 ответов


обычно лучший способ проверить модули Guice-это просто создать инжектор в тесте и убедиться, что вы можете получить экземпляры ключей, которые вам небезразличны.

чтобы сделать это, не вызывая производственного материала, вам может потребоваться заменить некоторые модули другими модулями. Вы можете использовать Modules.override выборочно переопределять отдельные привязки, но обычно лучше просто не устанавливать модули типа "production" и вместо этого использовать поддельные привязки.

С Guice 4.0 существует вспомогательный класс BoundFieldModule что может помочь с этим. Я часто настраиваю тесты, такие как:

public final class MyModuleTest {
  @Bind @Mock DatabaseConnection dbConnection;
  @Bind @Mock SomeOtherDependency someOtherDependency;

  @Inject Provider<MyThing> myThingProvider;

  @Before public void setUp() {
    MockitoAnnotations.initMocks(this);
    Guice.createInjector(new MyModule(), BoundFieldModule.of(this))
        .injectMembers(this);
  }

  @Test public void testCanInjectMyThing() {
    myThingProvider.get();
  }
}

больше документация BoundFieldModule на Guice wiki.