在NPE中运行带有TestNG结果的Arquillian

在NPE中运行带有TestNG结果的Arquillian,testng,jboss-arquillian,Testng,Jboss Arquillian,我试图简单地将Arquillian示例转换为TestNG测试。我已经替换了相应的依赖项(junit:junit=>org.testng:testng,org.jboss.arquillian.junit:arquillian-junit-container=>org.jboss.arquillian.testng:arquillian-testng-container)并更新了源代码() 当我运行测试时,我得到两个NullPointerEception:第108行和第98行。这两个位置都标记了对

我试图简单地将Arquillian示例转换为TestNG测试。我已经替换了相应的依赖项(
junit:junit
=>
org.testng:testng
org.jboss.arquillian.junit:arquillian-junit-container
=>
org.jboss.arquillian.testng:arquillian-testng-container
)并更新了源代码()


当我运行测试时,我得到两个
NullPointerEception
:第108行和第98行。这两个位置都标记了对EntityManager的首次访问。此外,方法
arquillianBeforeTest
也没有按expexted执行。也不是通过
@beforethod

使用
inContainer()
方法检查您的测试,以查看您的测试是否在服务器/容器中运行。更多信息请访问

解决方案是使用TestNG
@beforethod
@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
    }
}

其他Arquillian方法是否如您所期望的那样运行?你看过吗?TestNG与Arquillian的关系一直不稳定:(现在我尝试了一个非常简单的示例测试类,并认为Arquillian方法没有被调用。但是测试方法是:-/是的,我看到了这个链接,我有点担心。我在所有项目中都使用TestNG作为单元测试框架。我不想因为Arquillian有一些(不必要的)副作用而放弃这个一般决定:-(现在我已经在您发布的链接中找到了解决方案。请随意将其作为答案发布,并向方法
inContainer()
提供建议,以检测调用是在容器内部还是外部。