Junit для инъекций Google Guice - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть класс Dummy.java, конструктор которого помечен @ Inject.

@Inject
public Dummy() {
  this.injector = TestDummy.getInjector();
  init();
}

В init () я добавляю различные зависимости, такие как:

private void init() {
  this.tester = injector.getInstance(tester.class);
  this.jack = injector.getInstance(jack.class);   
}

Теперь, когда я пишу junit для Dummy.java, я не понимаю, как внедрить эти зависимости? Любые выводы будут оценены.

1 Ответ

0 голосов
/ 10 сентября 2018

Проблема в том, что вы явно говорите о своем Инжекторе. В идеале вы должны получать свои зависимости (тестер и джек) через конструктор, без необходимости устанавливать инжектор.

@Inject
public Dummy(Tester tester, Jack jack) {
  this.tester = tester;
  this.jack = jack;
}

Теперь в ваших тестах вы можете вызвать этот конструктор public вручную и передать тот экземпляр экземпляра Tester или Jack, который вам нужен, включая (но не обязательно) двойной или ложный тест.

Dummy dummy = new Dummy(new UnitTestTester(), mockJack);

Поскольку вы аннотировали экземпляр с помощью @Inject, вам не нужно беспокоиться об Injector: пока вы получаете копию Dummy из Injector, он будет читать этот конструктор и передавать ваши Tester и Jack экземпляры.

public class YourDummyConsumer {
  @Inject public YourDummyConsumer(Dummy dummy) { /* ... */ }
}

getInstance по-прежнему полезен, но обычно его можно увидеть только на самом верхнем уровне, в классе приложения или в методе public static void main(String[] args):

Dummy dummy = injector.getInstance(dummy);
...