使用TestNG运行Arquillian会导致NPE

时间:2015-11-19 10:30:59

标签: testng jboss-arquillian

我正在尝试将Arquillian示例arquillian-persistence-tutorial简单地转换为TestNG测试。我已经替换了相应的依赖项( for y in range(0,5): print '\n' for x in tableau: if y < len(x): print x[y], else : print ' ' =&gt; junit:junitorg.testng:testng =&gt; org.jboss.arquillian.junit:arquillian-junit-container)并更新了源代码(https://gist.github.com/thomas-mc-work/a296ac40caa402b5120a)。< / p>

当我运行测试时,我得到两个org.jboss.arquillian.testng:arquillian-testng-container:第108和98行。两个位置都标记了对注入NullPointerEception的第一次访问。方法EntityManager也没有被执行。也不是通过arquillianBeforeTest的经典TestNG样式。

1 个答案:

答案 0 :(得分:2)

请使用inContainer()方法检查您的测试,以查看您的测试是否在服务器/容器中运行。还有http://jayshaughnessy.blogspot.com/2012/11/arquillian-and-testng.html

的更多信息

解决方案是使用来自TestNG @BeforeMethod@AfterMethod的注释。重要的区别是,Arquillian每次测试都会调用两次TestNG:一次在内部,一次在容器外。外部是第一个无法注入EntityManager的地方。因此,您必须询问您是在校内还是校外:

@ArquillianResource
protected InitialContext initialContext;

@PersistenceContext
protected EntityManager em;

protected boolean inContainer() {
    // If the injection is done we're running in the container.
    return (null != initialContext);
}

@BeforeMethod
protected void beforeMethod() {
    if(inContainer()) {
        // use the EntityManager
    }
}