代码之家  ›  专栏  ›  技术社区  ›  symon

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

  •  1
  • symon  · 技术社区  · 7 年前

    将对象注入到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时遇到了一些问题。

    1 回复  |  直到 7 年前
        1
  •  3
  •   RocketRaccoon    7 年前

    我已经为您创建了一些通用示例- test with injection example

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

    结果测试如下所示:

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