Junit为google guice注入

问题描述 投票:0回答:1

我有一个类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);   
}

现在当我为Dummy.java编写junit时,我没有得到如何注入这些依赖项?任何线索都会被评估。

dependency-injection guice
1个回答
1
投票

这里的问题是你明确关于你的注射器。理想情况下,您应该通过构造函数接收依赖项(Tester和Jack),而无需设置Injector。

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

现在在测试中,您可以手动调用此public构造函数,并传入您想要的任何Tester或Jack实例,包括(但不要求)测试double或mock。

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

因为你已经用@Inject注释了实例,所以你不必担心Injector:只要你从Injector获得Dummy的副本,它就会读取该构造函数并传入你的Tester和Jack实例。

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

getInstance仍然有用,但通常你只能在最高级别,在你的Application类或public static void main(String[] args)方法中看到它:

Dummy dummy = injector.getInstance(dummy);
© www.soinside.com 2019 - 2024. All rights reserved.