假设我有Z类,它注入A类:
class Z {
@Inject
public Z(.., A arg, ..) {
..
}
}
假设A类有这个构造函数:
@Inject
public A(B arg0, C arg1, D arg2) {
...
}
我希望注入正常工作,除非在特殊情况下,我想提供其中一个参数。例如,使用C类的cObject构造A.请注意,A本身是使用Z构建的。
我想要这个,因为我正在为Z编写功能测试,我想根据测试提供不同类型的假动作。一个测试文件只包含一种假冒B,或C或D。
答案 0 :(得分:2)
我建议在这里使用Modules.override
,其中包含有关其用于功能测试的文档。谨慎使用它,因为事情可能变得非常混乱而且难以遵循,但它看起来像这样:
@Before
public void createInjector() {
this.injector = Guice.createInjector(
Modules.override(new YourZABCDModule()).with(new AbstractModule() {
@Override public void configure() {
bind(B.class).to(FakeB.class);
}
}));
}
或者,与Modules.override
文档中一样,只需使用较小的模块即可实现更细粒度的组合:
@Before
public void createInjector() {
this.injector = Guice.createInjector(
new ZAModule(),
new FakeBModule(),
new CModule(),
new DModule());
}