Java 如何使用带有辅助注入的模拟对象而不是真正的实现类

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

我有以下抽象类:

公共抽象类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));
}
}
我还想使用一个模块进行测试,该模块将使用模拟对象替换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);
而不是使用辅助注射,这不会很好地模拟