我找不到任何令人满意的解决方案来解决这个问题,尽管其他人以前也遇到过......
我想测试一个使用 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/