我剛剛開始玩Guice,我可以想到的一個用例是,在測試中我只想覆蓋單個綁定。我想我想使用剩餘的生產級綁定來確保一切安裝正確並避免重複。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接口與實現之間的映射。
另外,在與一位同事討論這件事後,我們似乎會走上重寫整個模塊的道路,並確保我們的模塊已正確定義。這似乎可能會導致問題,但是綁定在模塊中放置錯誤並且需要移動,因此可能會破壞大量測試,因爲綁定可能不再可用於重寫。
就像「咆哮錯誤的樹」一樣:D – 2009-01-27 14:34:48