gpt4 book ai didi

java - 是否可以将依赖项绑定(bind)到 TestNG 中的拦截器?

转载 作者:太空宇宙 更新时间:2023-11-04 06:10:20 25 4
gpt4 key购买 nike

public class AbstractTest implements ITestListener {

@Inject
protected MobConfiguration mob;

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

当我尝试在监听器类中注入(inject)依赖项时,它总是返回 null
有没有可能的方法在监听器或拦截器实现类中处理 DI?

最佳答案

我已成功尝试this approach (使用工厂,本答案末尾的代码示例)。还有一点需要注意,如果您使用组注释,则由此产生的歧视(如 TestDIFactory.java 代码中的第 126 行 - there again )似乎只有在您使用 testng.xml 文件时才可靠。

否则,使用注释参数时,只有默认情况 ( l. 130, TestDIFactory.java ) 似乎会被激活。通过在 l. 122, TestDIFactory.java 之后添加 if(context.getIncludedGroups().length == 0) throw new NullPointerException("no groups found"); 可以轻松检查这一点。

如果您需要显式地实现ITestListener,那么相应地修改public void onStart(ITestContext context)方法应该很容易。

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

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

编辑:我已经证明工厂方法在一种情况下是有问题的:如果工厂提供的模块共享绑定(bind),这意味着模块 A 中绑定(bind)的一个对象也绑定(bind)在另一个模块 B 中,但您请求一个组合模块,该模块在 A 和 B 上安装/调用配置,然后由工厂返回。您遇到了很大的变化以获取 InstantiationException。所以对我来说,经验法则是:仅当每个测试只需要一个模块时才使用工厂。在其他情况下我使用 i。 e. @Guice(modules = {TestDIFactory.A.class, TestDIFactory.B.class}) 假设给定 A 和 B 公共(public)访问权限。

关于java - 是否可以将依赖项绑定(bind)到 TestNG 中的拦截器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28825372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com