[英]How to use a mock Object with Assisted Inject instead of real implementation class
我有以下抽象類:
公共抽象類MyClass
然后,我有以下兩個抽象類擴展了這一類:
公共抽象類AClass擴展MyClass
和
公共抽象類BClass擴展了MyClass
我必須使用依賴注入來實例化我的對象。 擴展類AClass
和BClass
的類的AClass
BClass
接收String
作為參數,因此,我使用Google Guice的AssistedInject
擴展。
在我的普通BinderModule中,我有以下代碼:
public class BinderModule implements Module{
@Override
public void configure(Binder binder) {
binder.install(
new FactoryModuleBuilder().
implement(AClass.class, AClassImpl.class).
build(AClassFactory.class));
binder.install(
new FactoryModuleBuilder().
implement(BClass.class, BClassImpl.class).
build(BClassFactory.class));
}
}
我還想使用一個模塊進行測試,該模塊將用模擬對象代替AClassImpl和BClassImpl。
到目前為止,當我使用注射時,我做了這樣的事情:
InterfaceA myMockObj = EasyMock.createMock(InterfaceAImpl.class);
binder.bind(InterfaceA.class).toInstance(myMockObj);
問題在於,現在implement
方法僅接收Class
參數,而我無法將模擬的對象連接到Abstract類。
關於如何克服這個問題有什么想法嗎?
通常,如果根本不使用Guice,則單元測試會更簡單。 但是,如果您確實願意,可以像下面這樣模擬工廠接口:
BClass myMockObj = EasyMock.createMock(BClass.class);
BClassFactory mockFactory = EasyMock.createMock(BClassFactory.class);
EasyMock.expect(mockFactory.create(arguments)).andStubReturn(myMockObj);
bind(BClassFactory.class).toInstance(mockFactory);
而不是使用輔助注入,而模擬注入不會起到很好的作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.