我有一个类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时,我没有得到如何注入这些依赖项?任何线索都会被评估。
这里的问题是你明确关于你的注射器。理想情况下,您应该通过构造函数接收依赖项(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);