我正在尝试将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:junit
,org.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样式。
答案 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
}
}