我想为执行一些基本CRUD操作的ejb编写集成测试 这是我的测试现在的样子:
@Test
public void testAdd() {
EJBContainer container = javax.ejb.embeddable.EJBContainer.createEJBContainer();
MyEJBLocal myEjb= (MyEJBLocal)container.getContext().lookup("java:global/classes/MyEJB");
// assuming I empty the database in the setup
myEjb.add();
int numOfEntities= myEjb.getAll().size();
Assert.assertTrue("Unexpected number of entities", (numOfEntities==1));
container.close();
}
显然,这不是一个好的测试,但如何正确地集成DBUnit或任何类似的框架来控制add()
方法之前和之后的数据库状态?
我使用EJB,Hibernate和嵌入式Glassfish
答案 0 :(得分:3)
您需要use Arquillian来正确测试EJB。 Arquillian允许您运行集成测试,它补充了常规的模拟服务单元测试。
我建议你有两个独立的档案:
另一个连接到您在生产环境中使用的数据库服务器克隆。
第二种方法对于测试您可能使用的数据库特定功能(窗口函数,公用表表达式,本机查询)以及事务逻辑(死锁,乐观锁定失败)非常有用
答案 1 :(得分:1)
我建议您不要使用嵌入式Glassfish。为什么?因为this。
正如@VladMihalcea已经说过:Arquillian可能是你的最佳选择。要控制数据库状态,您基本上至少有两个选项: