Java 如何使用带有辅助注入的模拟对象而不是真正的实现类
我有以下抽象类: 公共抽象类MyClass 然后我有以下两个抽象类,它们扩展了这个类: 公共抽象类AClass扩展了MyClass 及 公共抽象类BClass扩展了MyClass 我必须使用依赖注入来实例化我的对象。扩展类Java 如何使用带有辅助注入的模拟对象而不是真正的实现类,java,unit-testing,dependency-injection,guice,Java,Unit Testing,Dependency Injection,Guice,我有以下抽象类: 公共抽象类MyClass 然后我有以下两个抽象类,它们扩展了这个类: 公共抽象类AClass扩展了MyClass 及 公共抽象类BClass扩展了MyClass 我必须使用依赖注入来实例化我的对象。扩展类AClass和BClass的类的构造函数接收一个String作为参数,因此我使用Google Guice的AssistedInject扩展 在我的普通BinderModule中,我有以下代码: public class BinderModule implements Modul
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
参数,我无法将模拟对象连接到抽象类
有没有办法克服这个问题 一般来说,如果根本不使用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);
而不是使用辅助注射,这不会很好地模拟