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

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

我能够通过创建注入器来测试childmodule,方法是将其所需的依赖项(foo.class)与mock绑定并测试行为。
为了测试根模块,我应该显式地传递自根模块安装childmodule以来childmodule使用的所有依赖项,还是有一个解决方法用mock覆盖已安装的childmodule?

最佳答案

您可以使子Module(s)成为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);
        }
    }
}

关于java - 如何测试根级Guice模块?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57049443/

10-10 12:36