是否有使用Mockito和Guice进行联合测试的已知实现

时间:2014-02-04 19:02:33

标签: java unit-testing dependency-injection mockito guice

我正在使用Guice进行使用Mockito和DI的单元测试。我想实现一个允许我在生产和测试模式之间轻松切换的解决方案。我没有找到任何具体的例子,所以我使用我对这些技术的有限知识来实现​​我的解决方案。

首先我创建了两个AbstractModule

public class ProductionModule extends AbstractModule {
      @Override 
      protected void configure() {
          bind(DaoA.class);
          bind(DaoB.class);
          ...       
      }
}



public class TestModule extends AbstractModule {
      @Override 
      protected void configure() {        
          bind(DaoA.class).toInstance(Mockito.mock(DaoA.class));
          bind(DaoB.class).toInstance(Mockito.mock(DaoB.class));
         ...
      }
}

我的注射器是单身人士

public class GuiceInjector {
        private static GuiceInjector instance;     
        private Injector injector;

        private GuiceInjector() {       }

        public static GuiceInjector getInstance(){
            if(instance!=null) return instance;
            else{
                instance = new GuiceInjector();
            }
            return instance;
        }

        public <T> T get(Class<? extends T> cls) {
            return injector.getInstance(cls);
        }

        public void install(AbstractModule module){
            injector = Guice.createInjector(module);
        }
}

制作模式

所以基本上当应用程序以生产模式启动时,我安装了ProductionModule,然后使用GuiceInjector来获取所有DAO。

GuiceInjector.getInstance().install(new ProductionModule());

测试模式

对于测试部分,我按如下方式设置TestModule,以便所有DAO都被注射器模拟。

@Before
public void setup() {
    GuiceInjector.getInstance().install(new TestModule());
}

如果我想调用真正的DAO,我使用

when(DaoA.getSomthing(...)).thenCallRealMethod();

使用Mockito和Guice有没有已知/更好的做法?

0 个答案:

没有答案