Ich habe gerade angefangen, mit Guice zu spielen, und ein Anwendungsfall, den ich mir vorstellen kann, ist, dass ich in einem Test nur eine einzelne Bindung überschreiben möchte. Ich denke, ich möchte den Rest der Bindungen auf Produktionsebene verwenden, um sicherzustellen, dass alles korrekt eingerichtet ist und um Doppelarbeit zu vermeiden.
Stellen Sie sich vor, ich habe das folgende Modul
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);
}
}
Und in meinem Test möchte ich nur InterfaceC überschreiben, während InterfaceA und InterfaceB im Takt bleiben, also möchte ich etwas wie:
Module testModule = new Module() {
public void configure(Binder binder) {
binder.bind(InterfaceC.class).to(MockC.class);
}
};
Guice.createInjector(new ProductionModule(), testModule);
Ich habe auch folgendes versucht, ohne Glück:
Module testModule = new ProductionModule() {
public void configure(Binder binder) {
super.configure(binder);
binder.bind(InterfaceC.class).to(MockC.class);
}
};
Guice.createInjector(testModule);
Weiß jemand, ob es möglich ist, das zu tun, was ich will, oder belle ich den falschen Baum komplett an?
--- Follow-up: Es scheint, dass ich erreichen kann, was ich will, wenn ich das @ ImplementedBy-Tag auf der Schnittstelle verwende und dann einfach eine Bindung im Testfall bereitstelle, was gut funktioniert, wenn eine 1-1-Zuordnung zwischen besteht die Schnittstelle und Implementierung.
Nachdem wir dies mit einem Kollegen besprochen haben, scheinen wir den Weg zu beschreiten, ein ganzes Modul zu überschreiben und sicherzustellen, dass unsere Module korrekt definiert sind. Dies scheint jedoch ein Problem zu verursachen, wenn eine Bindung in einem Modul falsch platziert ist und verschoben werden muss, wodurch möglicherweise eine Reihe von Tests unterbrochen werden, da Bindungen möglicherweise nicht mehr zum Überschreiben verfügbar sind.