Arquillian + TestNG:如何在@ Before / @ After方法中访问容器管理对象?

时间:2014-04-09 10:20:30

标签: java testng jboss-arquillian

我找不到任何令人满意的解决方案来解决这个问题,尽管其他人之前已经遇到过这个问题......

我想测试一个使用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....
    }
}

据我所知,只有Test-methods在容器中执行。我发现的大多数信息似乎已经过时了。

有没有很好的方法来实现这个目标?

谢谢!

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

1 个答案:

答案 0 :(得分:2)

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

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

@BeforeMethod
public void cleanDB () {
    if (dao != null) {    
        dao.remove(foo);
    } 
}

因此,如果你创建一个断点并运行你的代码,你应该有2个这种方法的调用: 1st:dao为null 第二名:dao注入

希望有所帮助。

有关详细信息,另请参阅http://jayshaughnessy.blogspot.de/2012/11/arquillian-and-testng.html