我刚刚开始玩Guice,我可以想到的一个用例是,在测试中,我只想覆盖单个绑定。我想我想使用其余的生产级别绑定来确保所有设置都正确并避免重复。
因此,假设我有以下模块
public class ProductionModule implements Module {
public void configure(Binder binder) {
binder.bind(InterfaceA.class).to(ConcreteA.class);
binder.bind(InterfaceB.class).to(ConcreteB.class);
binder.bind(InterfaceC.class).to(ConcreteC.class);
}
}
在我的测试中,我只想覆盖InterfaceC,同时保持InterfaceA和InterfaceB不变,所以我想要类似以下内容:
Module testModule = new Module() {
public void configure(Binder binder) {
binder.bind(InterfaceC.class).to(MockC.class);
}
};
Guice.createInjector(new ProductionModule(), testModule);
我也尝试了以下方法,但是没有运气:
Module testModule = new ProductionModule() {
public void configure(Binder binder) {
super.configure(binder);
binder.bind(InterfaceC.class).to(MockC.class);
}
};
Guice.createInjector(testModule);
有谁知道是否有可能做我想做的事,还是我完全把错误的树种了?
---跟进:如果我在接口上使用@ImplementedBy标记,然后在测试用例中提供绑定,似乎可以实现我想要的目标,当之间存在1-1映射时,该方法很好用接口和实现。
同样,在与同事讨论之后,似乎我们将朝着覆盖整个模块并确保正确定义模块的方向走。尽管绑定在模块中的位置不正确并且需要移动,但这似乎可能会引起问题,因为绑定可能不再可用于覆盖,因此可能会破坏测试负载。