私は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タグを使用して、テストケースでバインディングを提供するだけで、望みどおりの結果が得られるようです。これは、1-1のマッピングがある場合にうまく機能します。インターフェースと実装。
また、これについて同僚と話し合った後、モジュール全体をオーバーライドして、モジュールが正しく定義されていることを確認する道を進んでいるように思えます。これは、バインディングがモジュール内で誤って配置されて移動する必要がある場合に問題を引き起こす可能性があるようです。バインディングをオーバーライドすることができなくなったため、テストの負荷を壊す可能性があります。