1

我有几个关于使用 JUnit 集成测试 EJB 3.0 组件的问题。

在您的 JUnit 测试中,您可以向会话 bean 注入资源本地实体管理器,从而“模拟”ejb-container。但如果...

  1. 如果您需要测试您的 ejb 方法上的事务属性是否被正确处理,该怎么办?这可以在容器外完成吗?如果没有,在容器内测试它的最简单方法是什么?

  2. 如果您需要在每次测试之前确保 db 中有一些测试记录怎么办?您如何确保在测试执行后(即使它失败)db 已清除测试数据?

4

2 回答 2

2

您还可以使用可嵌入的 JBoss 对 EJB 进行单元测试,如#553031中所述

它不是一个很好的解决方案,但它有效。

于 2009-02-25T12:02:55.770 回答
0

如果您碰巧在使用 Maven,或者即使您不是,这可能会有所帮助。测试事务语义的典型方法是使用内存数据库,如 H2 或 HSQLDB (Hypersonic)。因此,实际上,您是在一个非常轻量级的容器中进行测试。Hibernate 可以配置为您的 JPA 实现。它将数据持久化到完全在 RAM 中运行的功能齐全的关系数据库中。

至于固定装置,有很多选择,其中一个比较流行的是DbUnit,但根据我的经验,它们比它们的价值要复杂得多。我更喜欢创建自己的“构建器”类,用必要的模型对象设置我的测试。我喜欢配置“setters”返回构建器的一个实例,这样我就可以像这样将调用链接在一起:

  this.emf = Persistence.createEntityManagerFactory ("hibernate-hsqldb");
  Widget widget = new WidgetBuilder(this.emf).setAnOption(4).setAnother("test").build();

通常,emf将在 setUp 方法中创建并在 tearDown 中关闭。这会在测试运行之间完全初始化数据库。

于 2009-02-25T01:22:38.477 回答