如何测试根级别的Guice模块?

3

我有一个根模块安装了一个子模块,例如:

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();
 }
}

我可以通过绑定所需的依赖项(如Foo.class)并使用模拟进行测试,来测试ChildModule。
要测试根Module,我是否需要显式传递ChildModule消耗的所有依赖项,因为根模块安装了ChildModule,或者是否有一种解决方案可以用Mock来覆盖已安装的ChildModule?

你是否查看过这篇文章 https://dev59.com/SF8d5IYBdhLWcg3wiip9? - olgacosta
请澄清一下:您是想在实例化RootModule之后测试其中的某些内容,还是只是想测试RootModule确实安装了ChildModule - MyStackRunnethOver
1个回答

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);
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接