Я щойно почав грати з 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);
}
}
І в моєму тесті я хочу лише перекрити InterfaceC, зберігаючи в інтерфейсі InterfaceA та InterfaceB, тому я хочу щось подібне:
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 відображенням є інтерфейс та реалізація.
Крім того, після обговорення цього питання з колегою, здавалося б, ми б рухалися вниз шляхом перекриття всього модуля і гарантуємо, що наші модулі визначені правильно. Це здається, що це може спричинити проблеми, хоча там, де прив'язка не розміщена в модулі, і її потрібно перенести, таким чином, можливо, порушується навантаження тестів, оскільки прив'язки можуть бути недоступними для їх перегляду.