是否可以将依赖项绑定到TestNG中的拦截器?

时间:2015-03-03 06:23:19

标签: java testng guice

public class AbstractTest implements ITestListener {

    @Inject
    protected MobConfiguration mob;

    @Override
    public void onStart(ITestContext context) {
        // TODO Auto-generated method stub
    }
}

当我试图在侦听器类中注入依赖项时,它总是返回null?在侦听器或拦截器实现器类中是否有任何可能的方法来处理DI?

1 个答案:

答案 0 :(得分:1)

我已成功尝试this approach(使用本答案末尾的工厂代码示例)。如果使用组注释,还有一个需要注意的事项,因此,只有在使用testng.xml文件时,因此歧视(如TestDIFactory.java代码中的第126行 - there again)才可行。 / p>

否则只使用注释参数,默认情况(l. 130, TestDIFactory.java)似乎变为活动状态。您可以在l. 122, TestDIFactory.java

之后添加if(context.getIncludedGroups().length == 0) throw new NullPointerException("no groups found");来轻松检查

如果您明确需要implements ITestListener,则应该很容易相应地修改public void onStart(ITestContext context)方法。

@Guice(moduleFactory = TestDIFactory.class)
public class YourTestClass {
 @Inject protected MobConfiguration mob;

 @Test(groups = {"unit"})
 public void yourtest() {}
}

编辑: 我已经在一个案例中证明了工厂方法存在问题: 如果工厂提供的模块共享绑定意味着模块A中绑定的一个对象也绑定在另一个模块B中,但是您请求组合模块在A和B上安装/调用configure,然后由工厂返回。你遇到了很大的变化才能得到InstantiationException。因此,对我来说,经验法则是:工厂只在每次测试只需要一个模块时。在其他情况下,我使用我。即@Guice(modules = {TestDIFactory.A.class, TestDIFactory.B.class})假设A和B公共访问权限。