Java 在基于testNG的框架中,如何在testNG测试类之外使用GoogleGuice DI?

Java 在基于testNG的框架中,如何在testNG测试类之外使用GoogleGuice DI?,java,testng,guice,Java,Testng,Guice,将对象注入testNG测试类非常简单,这主要是为我们处理的,但是如何将google guice DI构建到我的框架中,并将其用于不一定是测试的类 我想对我的页面对象类的依赖项使用简单的依赖项注入,这些实际上与testNG无关,那么我们如何为这些类初始化依赖项呢 下面是我要替换的一段简单代码示例: public class HeaderComponent extends AbstractBasePageObject { private static final Logger LOG = L

将对象注入testNG测试类非常简单,这主要是为我们处理的,但是如何将google guice DI构建到我的框架中,并将其用于不一定是测试的类

我想对我的页面对象类的依赖项使用简单的依赖项注入,这些实际上与testNG无关,那么我们如何为这些类初始化依赖项呢

下面是我要替换的一段简单代码示例:

public class HeaderComponent extends AbstractBasePageObject {
    private static final Logger LOG = LoggerFactory.getLogger(HeaderComponent.class);
    private MenuComponent menu = new MenuComponent(getDriver());


    public HeaderComponent(NgWebDriver ngdriver) {
        super(ngdriver);
    }

    public MenuComponent getMenuComponent() {
        return menu;
    }
}
此类与testNG本身完全无关,因此如何初始化所有内容以获得以下结果:

@Inject
MenuComponent menu

我在菜单中尝试的每件事都会引发nullPointerException,因为我想我在加载guice时遇到了一些问题。

我已经为您创建了一些通用示例-

我希望它能像你期望的那样工作。它提供了一些测试配置,将它们注入到驱动程序中,最后将驱动程序注入到测试组件中

测试结果如下所示:

import com.google.inject.Inject;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;

@Guice(modules = {TestModule.class})
public class SimpleTest {

    @Inject
    ComponentUnderTest component;

    @Test
    public void sampleTest() {
        System.out.println(component.getParamToTest());
        System.out.println(component.param);
        System.out.println(component.elseone);
    }

}

这是最简单的部分,将一些实例变量注入页面对象如何?哪一个不是测试类?您检查过示例了吗?您是否需要将带有注入实例的PageObject从测试范围之外获取?您的用例是什么?我相信空指针是因为要初始化MenuComponent对象,需要将驱动程序作为参数传入。您是否尝试过@AssistedInject,因为它看起来像一个运行时值?该类中是否有其他不带参数的注入?