我找不到任何令人满意的解决方案来解决这个问题,尽管其他人之前已经遇到过这个问题......
我想测试一个使用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作为应用服务器。
答案 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。