簡體   English   中英

如何將模擬對象與輔助注入一起使用,而不是實際的實現類

[英]How to use a mock Object with Assisted Inject instead of real implementation class

我有以下抽象類:

公共抽象類MyClass

然后,我有以下兩個抽象類擴展了這一類:

公共抽象類AClass擴展MyClass

公共抽象類BClass擴展了MyClass

我必須使用依賴注入來實例化我的對象。 擴展類AClassBClass的類的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM