当前位置: 首页 > 知识库问答 >
问题:

为没有主方法的基本字段进样配置guice

华展鹏
2023-03-14

我最近一直在研究guice,并且需要在我的自动化框架中进行一些现场注入。例如,我有一个环境Setter类,我想将其作为单例注入到其他各种类中。

1)我没有标准的main方法,所以我正在努力解决如何正确引导guice。我正在使用testNG,所以我试图使用静态块引导,如下所示:

public class TestExecutionListener implements IExecutionListener {
    private static final Logger LOG = LogManager.getLogger(TestExecutionListener.class);


   static {
            Bootstrapper.BootStrapGuiceDI();
    }

    @Inject
    EnvironmentSetter env;

    @Override
    public void onExecutionStart() {
        LOG.debug("Starting test run!");
        env.generateEnvironmentProperties();
    }

    @Override
    public void onExecutionFinish() {
        LOG.debug("Finished test run!");
    }

}

我还创建了以下内容:

public class EnvironmentSetterModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(EnvironmentSetter.class);
    }
}

这就是我从静态块调用的内容:

public static void BootStrapGuiceDI() {
    LOG.debug("Bootstrapping");
    Injector injector = Guice.createInjector(new Module());
    EnvironmentSetter env = injector.getInstance(EnvironmentSetter.class);
}

在这种情况下,注入的EnvironmentSetter env仍然为空,我需要什么才能有效地使用它?

环境设置类:

public class EnvironmentSetter implements IEnvironmentPopulator {
    private static final Logger LOG = LogManager.getLogger(EnvironmentSetter.class);

    PropertyProvider properties = PropertyProvider.INSTANCE;


    public EnvironmentSetter() {

    }

    public void generateEnvironmentProperties() {
        Properties props = new Properties();
        properties.getAllProperties().forEach((k,v) -> props.setProperty(k,v));
        try {
            File f = new File("target\\allure-results\\environment.properties");
            f.getParentFile().mkdirs();
            f.createNewFile();
            props.store(new FileOutputStream(f), "Allure Environment Properties");
        } catch(IOException ioe) {
            LOG.fatal(ioe);
        }
    }
}

共有2个答案

袁良弼
2023-03-14

如果您正在使用TestNG,有一种更简单的方法可以使用annotation guiceModule来实现。基本上,TestNG会为您进行引导,您所需要做的就是在注释中提到Guice模块名。示例:

@Test(guiceModule = GuiceExampleModule.class)
public class GuiceTest {

  @Inject
  ExternalDependency dependency;

  @Test
  public void singletonShouldWork() {
    Assert.assertTrue(true, dependency.shouldExecute());
  }
}

在Cedric的博客文章《TestNG和Guice:天造地设的一对》中了解更多

钦永贞
2023-03-14

您应该添加createInjector方法中创建的模块,而不是新模块()

public static void BootStrapGuiceDI() {
    LOG.debug("Bootstrapping");
    // Injector injector = Guice.createInjector(new Module()); // use your module (EnvironmentSetterModule )
    // Now, guice will be able to "see" your class
    Injector injector = Guice.createInjector(new EnvironmentSetterModule());
    EnvironmentSetter env = injector.getInstance(EnvironmentSetter.class);
}

此外,仅引导它不会使它自动注入测试类中的所有字段,要在测试时注入,您可以使用新的< code>Injector并注入测试类的成员< code>injectMembers(this),其中< code>this将引用您的测试实例,因此必须在某个安装块上执行。查看guice上关于如何在Test =上正确启动它的文档

 类似资料:
  • 问题内容: 我正在使用一个字段,我希望在用户以其他颜色键入时设置字段的样式。例如,假设的样式声明为,而我想将其中的 一部分 更改为。有什么办法可行吗? 如果没有(我怀疑),那么关于如何在保持语义标记的同时如何模拟这种效果的任何创意? 问题答案: 您的猜想是正确的:样式仅适用于整个输入。 由于样式只能应用于整个元素,因此解决方案将要求每种所需颜色至少包含一个元素。 考虑相对于用户进行更改的点的输入字

  • 问题内容: 我想测试对象的特定字段是否与我指定的值匹配。在这种情况下,它是S3Bucket对象内的存储桶名称。据我所知,我需要为此编写一个自定义匹配器: 如果有一个更简单的方法可以做到这一点,那就好了: 谁能指出我类似的东西?我想在这种情况下我已经解决了我的问题,但这不是我第一次希望采用一种更简单的方法。 问题答案: 另外,对于更类型安全的版本,还有FeatureMatcher。在这种情况下,类似

  • 问题内容: 我试图让我的应用程序使用保存布尔值来更改屏幕的方向时保存一些数据。 我已经设置了许多断点,并且在变量视图中得到了布尔值的错误 我不知道为什么要在启动活动时用false值声明它,如果按下按钮将其更改为true。谁能帮我吗? 问题答案: 检查您的Android Studio中的构建变体是否具有 可调试 为真 proguard 被禁用或已被注释掉。

  • 本文向大家介绍hibernate5.2的基本配置方法(详解),包括了hibernate5.2的基本配置方法(详解)的使用技巧和注意事项,需要的朋友参考一下 目标:将Student实体对象加入数据库 1、首先需要下载三个东西:hibernate,slf4j,mysql。 2、分别取他们的包导入新建的项目中,我这里的版本是:hibernate-release-5.2.10里面lib目录下的requir

  • 将Spring框架更新到5.1.5后。从4.3.2发布。发布,我得到一个错误: 我花了两天时间寻找可能的解决方案,但我没有找到任何帮助。 整个消息: 父项目pom: 主题项目Pom: 非常感谢!

  • 本文向大家介绍php 使用mpdf实现指定字段配置字体样式的方法,包括了php 使用mpdf实现指定字段配置字体样式的方法的使用技巧和注意事项,需要的朋友参考一下 前两天在做一个pdf导出功能,使用的插件是kartik-v/yii2-mpdf,此插件使用的是mpdf mpdf文档地址: https://mpdf.github.io/ 有一个需求要求导出的pdf中需要将一个指定的字段设置为一个指定的