我想为执行一些基本 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
最佳答案
您需要use Arquillian正确测试您的 EJB。 Arquillian 允许您运行集成测试,以补充常规的模拟服务单元测试。
我建议您拥有两个单独的配置文件:
用于使用快速运行的内存数据库(HSQLDB、H2)并验证 JPQL/Criteria 查询
另一个连接到您在生产环境中使用的数据库服务器克隆的服务器。
第二种方法对于测试您可能使用的数据库特定功能(窗口函数、公用表表达式、 native 查询)以及事务逻辑(死锁、乐观锁定失败)非常有用
关于java - 与 EJB、JPA 和 DBUnit 的集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27515201/