测试私有模块的绑定

时间:2016-12-12 13:41:48

标签: java dependency-injection guice

在我的代码中有一个第三方guice绑定,我需要覆盖才能正常工作。 (让我们将它命名为InterfaceToBeOverridden.class) 为了安全起见,这没有改变并且工作正常,我想测试时要求喷油器 实际上,InterfaceToBeOverridden实例返回虚拟类的实例 问题是此布线安装在专用模块中。 使用Guice实现这一目标的最佳方法是什么?

代码如下所示:

public MainModule extends AbstractModule {
    @Override
    protected void configure() {
        // install a lot of prod modules 
        install(new MyChildModule())
    }
}


public MyChildModule extends PrivateModule {
    @Override 
    protected void configure() {
        // install some stuff that also needs parent bindings
        install(Modules.override(new ThirdPartyWiringModule(), new MyDummyOverrideModule()));
        expose(SomeClassUsingThirdPartyDependencies)
    }
}

public MyDummyOverrideModule extends AbstractModule {
    @Override 
    protected void configure() {
        bind(InterfaceToBeOverridden.class).to(DummyImplementation.class);
    }
}

这里的核心问题是我无法从父注入器访问该类,因为它位于子范围内 无法创建私有模块本身的注入器,因为它需要父进程的绑定。所以两个 以下方法会失败。

@Test
public void test() {
    Injector injector = createInjector(new MainModule());
    assertEquals(injector.getInstance(InterfaceToBeOverwritten.class).getClass(), DummyImplementation.class);
}

@Test
public void test() {
    Injector injector = createInjector(new ChildModule());
    assertEquals(injector.getInstance(InterfaceToBeOverwritten.class).getClass(), DummyImplementation.class);
}

0 个答案:

没有答案