TestNG-在GUI模块中访问ITestContext
我试着按照这个问题去做 考虑一下这一点:TestNG-在GUI模块中访问ITestContext,testng,guice,Testng,Guice,我试着按照这个问题去做 考虑一下这一点: public class TestParentModule extends AbstractModule { private ITestContext iTestContext; public TestParentModule(ITestContext iTestContext){ this.iTestContext = iTestContext; } @Override protected
public class TestParentModule extends AbstractModule {
private ITestContext iTestContext;
public TestParentModule(ITestContext iTestContext){
this.iTestContext = iTestContext;
}
@Override
protected void configure() {
System.out.println("Parent module called");
bind(ITestContext.class).toInstance(iTestContext);
}
}
public class TestModule extends AbstractModule {
@Inject
private ITestContext iTestContext;
@Override
protected void configure() {
System.out.println("configure is called :: " + iTestContext.getName());
}
}
Parent module called
configure is called :: Test1
configure is called :: Test1
configure is called :: Test1
套件
<suite name="My suite" parent-module="com.mypackage.guice.TestParentModule">
<test name="Test1" >
<classes>
<class name="com.mypackage.SampleTest"/>
</classes>
</test>
<test name="Test2" >
<classes>
<class name="com.mypackage.SampleTest"/>
</classes>
</test>
<test name="Test3" >
<classes>
<class name="com.mypackage.SampleTest"/>
</classes>
</test>
</suite>
输出::
public class TestParentModule extends AbstractModule {
private ITestContext iTestContext;
public TestParentModule(ITestContext iTestContext){
this.iTestContext = iTestContext;
}
@Override
protected void configure() {
System.out.println("Parent module called");
bind(ITestContext.class).toInstance(iTestContext);
}
}
public class TestModule extends AbstractModule {
@Inject
private ITestContext iTestContext;
@Override
protected void configure() {
System.out.println("configure is called :: " + iTestContext.getName());
}
}
Parent module called
configure is called :: Test1
configure is called :: Test1
configure is called :: Test1
有趣的是,它每次都注入相同的ITestContext实例?这不是TestNG中的一个bug吗
我希望我能看到
Parent module called
configure is called :: Test1
configure is called :: Test2
configure is called :: Test3
如何在GuiceModule中访问ITestContext?TestParentModule将ITestContext明确绑定到特定实例。此外,ParentModule仅被调用一次。所以它基本上要注入相同的实例。不确定它是否是一个bug。可以按照他们的设计
@Override
protected void configure() {
System.out.println("Parent module called");
bind(ITestContext.class).toInstance(iTestContext);
}
正如Jens在评论中指出的,使用IModuleFactory
可以解决您的问题
public class ModuleFactory implements IModuleFactory {
@Override
public Module createModule(ITestContext iTestContext, Class<?> aClass) {
return new TestModule(iTestContext);
}
}
public class TestModule extends AbstractModule {
private ITestContext iTestContext;
public TestModule(ITestContext iTestContext){
this.iTestContext = iTestContext;
}
@Override
protected void configure() {
//do something with iTestConext
bind(ITestContext.class).toInstance(iTestContext);
}
}
公共类ModuleFactory实现IModuleFactory{
@凌驾
公共模块createModule(ITestContext ITestContext,类aClass){
返回新的TestModule(iTestContext);
}
}
公共类TestModule扩展了AbstractModule{
私有ITestContext ITestContext;
公共测试模块(ITestContext ITestContext){
this.iTestContext=iTestContext;
}
@凌驾
受保护的void configure(){
//用iTestConext做点什么
绑定(ITestContext.class).toInstance(ITestContext);
}
}
TestNG的常见行为是至少为整个套件共享ITestContext。人们使用它在具有ITestContext属性的测试之间共享信息。您可以使用中所述的依赖项注入,但我建议不要干扰底层基础结构。