关于使用JUnit的集成测试EJB 3.0组件,我有几个问题。
在JUnit测试中,您可以向会话bean注入资源本地实体管理器,从而“模拟”ejb-container。但是如果......
如果您需要测试ejb方法上的事务属性是否得到妥善处理,该怎么办?这可以在容器外完成吗?如果没有,在容器内测试它的最简单方法是什么?
如果您需要确保每次测试前db中都有一些测试记录,该怎么办?您如何确保在测试执行后(即使它失败)db清除了测试数据?
答案 0 :(得分:2)
您还可以使用嵌入式JBoss对EJB进行单元测试,如#553031中所述
它不是一个漂亮的解决方案,但它确实有效。
答案 1 :(得分:0)
如果你碰巧使用Maven,或者即使你不是,this might be helpful。测试事务语义的典型方法是使用内存数据库,如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中关闭。这在测试运行之间完全初始化数据库。