私は 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);
}
}
私のテストでは、InterfaceA と InterfaceB をそのまま維持しながら、InterfaceC のみをオーバーライドしたいので、次のようなものが必要です。
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 タグを使用し、テスト ケースでバインディングを提供するだけで、目的を達成できるように思われます。インターフェイスと実装。
また、これについて同僚と話し合った後、モジュール全体をオーバーライドし、モジュールが正しく定義されていることを確認する道に進むように思われます。これは、バインディングがモジュール内で誤って配置され、移動する必要がある場合に問題を引き起こす可能性があるようです。そのため、バインディングをオーバーライドすることができなくなるため、テストの負荷が壊れる可能性があります。