public class AbstractTest implements ITestListener {
@Inject
protected MobConfiguration mob;
@Override
public void onStart(ITestContext context) {
// TODO Auto-generated method stub
}
}
当我试图在侦听器类中注入依赖项时,它总是返回null?在侦听器或拦截器实现器类中是否有任何可能的方法来处理DI?
答案 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公共访问权限。