Acabo de empezar a jugar con Guice, y un caso de uso en el que puedo pensar es que en una prueba solo quiero anular un enlace único. Creo que me gustaría usar el resto de los enlaces de nivel de producción para asegurar que todo esté configurado correctamente y evitar duplicaciones.
Entonces imagina que tengo el siguiente Módulo
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);
}
}
Y en mi prueba solo quiero anular InterfaceC, manteniendo InterfaceA e InterfaceB intactas, así que me gustaría algo como:
Module testModule = new Module() {
public void configure(Binder binder) {
binder.bind(InterfaceC.class).to(MockC.class);
}
};
Guice.createInjector(new ProductionModule(), testModule);
También probé lo siguiente, sin suerte:
Module testModule = new ProductionModule() {
public void configure(Binder binder) {
super.configure(binder);
binder.bind(InterfaceC.class).to(MockC.class);
}
};
Guice.createInjector(testModule);
¿Alguien sabe si es posible hacer lo que quiero o estoy ladrando por completo el árbol equivocado?
--- Seguimiento: Parece que puedo lograr lo que quiero si uso la etiqueta @ImplementedBy en la interfaz y luego solo proporciono un enlace en el caso de prueba, que funciona bien cuando hay un mapeo 1-1 entre La interfaz y la implementación.
Además, después de discutir esto con un colega, parecería que deberíamos anular un módulo completo y asegurarnos de que nuestros módulos estén definidos correctamente. Sin embargo, parece que podría causar un problema cuando un enlace está fuera de lugar en un módulo y necesita ser movido, por lo que posiblemente se rompa una carga de pruebas ya que los enlaces ya no estarán disponibles para anularse.