Java 阿奎利安+;TestNG:如何在@Before/@After方法中访问容器管理的对象?

Java 阿奎利安+;TestNG:如何在@Before/@After方法中访问容器管理的对象?,java,testng,jboss-arquillian,Java,Testng,Jboss Arquillian,我找不到任何令人满意的解决这个问题的方法,尽管其他人以前也遇到过 我想测试一个使用dao修改持久数据的业务bean dao可以注入测试方法,因为它是ejb 如何在典型的@Before/@After方法中使用它,例如清理数据库 简要示例: @PersistenceTest public class MyTestClass extends Arquillian { @Inject private Dao dao; @Inject private MyBean myBean;

我找不到任何令人满意的解决这个问题的方法,尽管其他人以前也遇到过

我想测试一个使用dao修改持久数据的业务bean

dao可以注入测试方法,因为它是ejb

如何在典型的
@Before/@After
方法中使用它,例如清理数据库

简要示例:

@PersistenceTest
public class MyTestClass extends Arquillian {
    @Inject private Dao dao;
    @Inject private MyBean myBean;

    @BeforeMethod
    public void cleanDB () {
        dao.remove(foo); // Currently throws NPE as dao is not injected.
    }

    @Test
    public void someTest () {
        // In a Test-method dao is available and calling cleanDB from here also 
        // works as intended....
    }
}
据我所知,只有测试方法在容器中执行。我发现的大多数信息似乎都过时了

有什么好办法可以做到这一点吗

谢谢大家!


我正在使用(托管)Wildfly 8作为应用服务器。

Arquillan两次调用@Before**和@After**方法。 一次进入客户机模式,一次进入容器模式

到目前为止,我找到的唯一解决方案是,在使用dao之前,必须验证dao是否已注入,如下所示:

@BeforeMethod
public void cleanDB () {
    if (dao != null) {    
        dao.remove(foo);
    } 
}
因此,如果创建断点并运行代码,则应该有2个此方法的调用: 第一:道是空的 第二:注射dao

希望有帮助

有关更多信息,请参见