как инициализировать Guice, если мой класс бега - junit?

1

Я пишу модуль API.

при разработке я использую junit для запуска кода

однако в конечном итоге некоторые другие модули будут использовать мой API.

Я хочу использовать шаблон инъекции зависимостей

a) Где должна быть моя основная запись, где я запускаю все зависимости или глобальные утилиты?

б) Я подумал, что это более аккуратно,

но где я должен его инициализировать?

  • 1
    Посмотрите на фреймворки, такие как Jukito, которые управляют жизненным циклом Guice для вас в тестах. И попытайтесь избежать внедрения в модульных тестах, если вы можете помочь, просто используйте прямые вызовы конструктора.
Теги:
dependency-injection
junit
inversion-of-control
guice

1 ответ

0

Это зависит от того, что вы пытаетесь сделать. Я нашел, с BoundFieldModule и аннотацией @Bind в Guice 4.0, что проще всего просто использовать Guice напрямую. Например:

@RunWith(JUnit4.class)
public final class TestMyInjectableCode {
  @Bind @Mock @SomeAnnotation Foo myFoo;
  @Bind @SomeAnnotation String myAnnotationString = "some constant";

  @Bind(lazy = true) @ShouldDoSomeThing Boolean shouldDoSomeThing = false;

  @Inject Provider<SystemUnderTest> systemUnderTest;

  @Before public void setUpInjector() {
    MockitoAnnotations.initMocks(this);
    Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this);
  }

  @Test public void test_ShouldDoSomeThing() {
    shouldDoSomeThing = true;
    SystemUnderTest sut = systemUnderTest.get();
    assertEquals("expected value", sut.getValue());
  }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню