Saya baru saja mulai bermain dengan Guice, dan kasus penggunaan yang dapat saya pikirkan adalah bahwa dalam ujian saya hanya ingin mengganti satu pengikatan. Saya pikir saya ingin menggunakan sisa ikatan tingkat produksi untuk memastikan semuanya sudah diatur dengan benar dan untuk menghindari duplikasi.
Jadi bayangkan saya memiliki Modul berikut
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);
}
}
Dan dalam pengujian saya, saya hanya ingin mengesampingkan InterfaceC, sambil tetap menjaga InterfaceA dan InterfaceB, jadi saya ingin sesuatu seperti:
Module testModule = new Module() {
public void configure(Binder binder) {
binder.bind(InterfaceC.class).to(MockC.class);
}
};
Guice.createInjector(new ProductionModule(), testModule);
Saya juga sudah mencoba yang berikut ini, tanpa hasil:
Module testModule = new ProductionModule() {
public void configure(Binder binder) {
super.configure(binder);
binder.bind(InterfaceC.class).to(MockC.class);
}
};
Guice.createInjector(testModule);
Adakah yang tahu apakah itu mungkin untuk melakukan apa yang saya inginkan atau saya benar-benar menggonggong pohon yang salah ??
--- Tindak lanjut: Tampaknya saya dapat mencapai apa yang saya inginkan jika saya menggunakan tag @ImplementedBy pada antarmuka dan kemudian hanya memberikan pengikatan dalam test case, yang berfungsi dengan baik ketika ada 1-1 pemetaan antara antarmuka dan implementasi.
Juga, setelah mendiskusikan hal ini dengan seorang kolega, sepertinya kita akan menuju jalan menimpa seluruh modul dan memastikan kita memiliki modul kita didefinisikan dengan benar. Hal ini sepertinya dapat menyebabkan masalah meskipun di mana pengikatan salah tempat dalam modul dan perlu dipindahkan, sehingga mungkin memecah beban tes karena binding mungkin tidak lagi tersedia untuk diganti.