Ho appena iniziato a giocare con Guice e un caso d'uso a cui riesco a pensare è che in un test voglio solo scavalcare un singolo binding. Penso che mi piacerebbe utilizzare il resto dei collegamenti a livello di produzione per garantire che tutto sia impostato correttamente ed evitare duplicazioni.
Quindi immagina di avere il seguente modulo
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);
}
}
E nel mio test voglio solo sostituire InterfaceC, mantenendo intatta InterfaceA e InterfaceB, quindi vorrei qualcosa del tipo:
Module testModule = new Module() {
public void configure(Binder binder) {
binder.bind(InterfaceC.class).to(MockC.class);
}
};
Guice.createInjector(new ProductionModule(), testModule);
Ho anche provato quanto segue, senza fortuna:
Module testModule = new ProductionModule() {
public void configure(Binder binder) {
super.configure(binder);
binder.bind(InterfaceC.class).to(MockC.class);
}
};
Guice.createInjector(testModule);
Qualcuno sa se è possibile fare quello che voglio o sto abbaiando completamente l'albero sbagliato ??
--- Follow-up: Sembrerebbe di poter ottenere ciò che voglio se utilizzo il tag @ImplementedBy sull'interfaccia e quindi fornisco un binding nel caso di test, che funziona bene quando c'è un mapping 1-1 tra l'interfaccia e l'implementazione.
Inoltre, dopo aver discusso di questo con un collega, sembrerebbe che avremmo intrapreso la strada per scavalcare un intero modulo e assicurarci che i nostri moduli siano definiti correttamente. Questo sembra che potrebbe causare un problema anche se un'associazione è posizionata in modo errato in un modulo e deve essere spostata, quindi è possibile interrompere un carico di test poiché le associazioni potrebbero non essere più disponibili per essere sostituite.