如何测试根级Guice模块?

时间:2019-07-16 02:55:07

标签: java guice

我有一个安装子模块的根模块。例如:

public class RootModule extends AbstractModule {
 @Override
 protected void configure() {
     install(new ChildModule());
 }
}
public class ChildModule extends AbstractModule {
 @Override
 protected void configure() {

 }

 @Provides
 @Singleton
 public Bar getBar(@Named("FooImpl") Foo foo) {
  return BarBuilder.withFoo(foo).build();
 }
}

我能够通过与Mock绑定其所需的依赖项(Foo.class)并测试行为来创建注入器,从而对ChildModule进行测试。

要测试根模块,我是否应该明确传递ChildModule自根模块安装ChildModule以来消耗的所有依赖项,或者是否有解决方法来用Mock覆盖已安装的ChildModule?

1 个答案:

答案 0 :(得分:0)

您可以使子Module成为RootModule的实例变量。然后,可以在测试时将模拟的Module传递到RootModule的构造函数中。

例如,带有孩子的通用根模块可能看起来像这样:

public class RootModule extends AbstractModule {

    private List<Module> childModules;

    public RootModule(List<Module> childModules) {
        this.childModules = childModules;
    }

    @Override
    protected void configure() {
        for (Module childModule : childModules) {
            install(childModule);
        }
    }
}