Java Arquillian TestNG:@在注释和CDI之前
我将Arquillian和TestNG与CDI一起使用 在每次测试之前,我需要访问一些CDIBeans成员,以便在每次测试之前进行一些设置。但我注意到,在每个@Before注释中,CDIBean都没有被注入,但在@Test注释的方法中,它们是被注入的 有人能解释一下为什么: 1) CDI bean还没有注入测试生命周期的@BeforeXXX注释方法部分Java Arquillian TestNG:@在注释和CDI之前,java,testng,jboss-arquillian,Java,Testng,Jboss Arquillian,我将Arquillian和TestNG与CDI一起使用 在每次测试之前,我需要访问一些CDIBeans成员,以便在每次测试之前进行一些设置。但我注意到,在每个@Before注释中,CDIBean都没有被注入,但在@Test注释的方法中,它们是被注入的 有人能解释一下为什么: 1) CDI bean还没有注入测试生命周期的@BeforeXXX注释方法部分 2) 在测试之前,我如何设置和访问CDIBean? 3) 在@Test注释中使用“dependency”属性是否正确? 非常感谢。我想我已经理解
2) 在测试之前,我如何设置和访问CDIBean?
3) 在@Test注释中使用“dependency”属性是否正确?
非常感谢。我想我已经理解了这个问题 测试在两个不同的位置运行: -在客户机中:maven jvm -容器中:服务器jvm 在客户端,CDIBean在@BeforeMethod中不可用,但当测试在容器中运行时,它们将可用。基本上,如果我们需要在before方法中访问cdibean,我们只需要确保测试正在容器中运行。为了实现这一点,我创建了一个扩展Arquillian的类,并公开了一个实现这一点的方法
public abstract class BaseArquillianTest extends Arquillian {
@ArquillianResource
protected InitialContext initialContext;
@Deployment
@OverProtocol("Servlet 3.0")
public static WebArchive createDeployment() {
WebArchive war = PackagingUtil.getWebArchiveForEJB();
return war;
}
protected boolean inContainer() {
// If the injection is done we're running in the container.
return (null != initialContext);
}
}
我们只需要在@BeforeMethod方法中执行此签入
@BeforeMethod(alwaysRun = true)
public void beforeMethod() throws Exception {
System.out.println("********* Initing beforeMethod");
if(inContainer()) {
System.out.println("$$$$$$ I am in a container");
Assert.assertNotNull(allRiskConfigurations);
} else {
System.out.println("$$$$$$ I am NOT in a container");
}
}
最后,客户端中的测试看起来被忽略,以反映容器中执行的测试的结果
如果这是错误的,请有人纠正一下好吗
无论如何,谢谢大家。我希望这有帮助