我有以下抽象类:
公共抽象类MyClass
然后我有两个扩展这个的抽象类:
公共抽象类AClass扩展了MyClass
和
公共抽象类BClass扩展了MyClass
我必须使用依赖注入来实例化我的对象。扩展类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));
}
}
我还想使用一个模块进行测试,它将模拟Object替换AClassImpl和BClassImpl。
到目前为止,当我使用注射时,我做了类似的事情:
InterfaceA myMockObj = EasyMock.createMock(InterfaceAImpl.class);
binder.bind(InterfaceA.class).toInstance(myMockObj);
问题是现在implement
方法只接收Class
个参数,我无法将模拟的对象连接到抽象类。
关于如何克服这一点的任何想法?
答案 0 :(得分:1)
一般情况下,如果你根本不使用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);
而不是使用辅助注射,这对于模拟不会很好。