目前正在使用Dagger进行测试,我想要的是实例化和注入不同的Bar实现。如何在提供的字段中注入字段?例如:
模块:
@Module(
injects = {
Main.class
},
complete = false,
library = true
)
public class ExampleTestModule {
@Provides
public Foo providesFoo() {
return new Foo();
}
@Provides
public Bar providesBar(BarImpl impl) {
// return new BarImpl(); // null
return impl;
}
}
主要:
public class Main {
@Inject
Foo foo;
}
Foo:
public class Foo {
@Inject
Bar bar;
}
酒吧:
public interface Bar {
}
BarImpl
public class BarImpl implements Bar {
}
测试用例:
public class ApplicationTest extends ApplicationTestCase<Application> {
public ApplicationTest() {
super(Application.class);
}
public void testFoo() {
Main main = new Main();
ObjectGraph.create(new ExampleTestModule()).inject(main);
assertNotNull(main.foo);
}
public void testFooBar() {
Main main = new Main();
ObjectGraph.create(new ExampleTestModule()).inject(main);
assertNotNull(main.foo.bar);
}
}
Main.Foo不为空,但Main.Foo.Bar为空。
@Inject
注释。由于您没有任何特殊的构造函数,因此这将是无参数构造函数。BarImpl
参数时,您可以让Dagger为您创建一个实例。如果BarImpl
具有任何可注入字段,则会自动完成此操作(就像在Foo
类中一样)。在这种情况下,您可以轻松地自己返回一个新的BarImpl
实例。