java - 与 EJB、JPA 和 DBUnit 的集成测试

标签 java hibernate jakarta-ee jpa dbunit

我想为执行一些基本 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/

相关文章:

java - hibernate.QueryException : could not resolve property

java - Hibernate = 在运行时设置级联选项?

java - 使用注释将单个实体映射到 Hibernate 中相同架构的多个表

java - EJB - 何时使用远程和/或本地接口(interface)?

java - 即使选项卡关闭后,Jsp 页面仍在运行

Java : Pattern matcher returns new lines unexpectedly

java - 适用于 Android 的内存友好快速键值访问解决方案

java - 在 arraylist 中使用多态性时调用子方法

java - 我的流媒体音频播放器在通话期间继续播放 - 无法停止! (安卓)

security - 基于Spring Security组的授权