java - Arquillian + TestNG : How to access container managed objects in @Before/@After methods?

标签 java testng jboss-arquillian

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

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

dao 可以注入(inject)到测试方法中,因为它是一个 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 之前验证它是否已注入(inject),如下所示:

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

因此,如果您设置断点并运行代码,您应该调用此方法两次: 第一:dao 为空 第二:注入(inject)dao

希望有帮助。

另请参阅http://jayshaughnessy.blogspot.de/2012/11/arquillian-and-testng.html了解更多信息。

关于java - Arquillian + TestNG : How to access container managed objects in @Before/@After methods?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22959576/

相关文章:

java - get时刷新Infinispan中条目的过期时间

java - 在这种情况下如何正确调用构造函数?

java - 如何将所有已弃用的类列出到文件中?

maven - 测试完成后自动构建诱惑报告

java - 初学java代码回顾

gradle - 使用build.gradle执行特定的testng组

java - Selenium 网络驱动程序 : Need solution for a very specific issue pertaining to @BeforeTest (TestNG)

ejb-3.1 - Arquillian 与 EJB 嵌入式容器

jboss-weld - 焊接 (CDI) : where do I put my test-only beans. 配置 <alternatives> 的 xml?

java - 在 arquillian 中设置数据源