0

我有一个使用 EJB3 和 JPA 的 JEE5 应用程序。例如,我有一些豆子

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

我想为这些服务编写一些测试。我知道我可以使用像 OpenEJB 这样的可嵌入容器,但是由于 JPA 在 Java SE 中可用,我想知道我是否可以在测试中使用它?当然我不会拥有所有

@PersistenceContext, @PersistenceUnit, @TransactionAttribute

可用的功能。所以我的问题是这是否值得尝试(手工交易管理等)?还是我应该使用嵌入式容器?我说的是集成测试(使用真实的内存数据库),而不是模拟周围的所有东西。

编辑:

还有一件事,因为我对在嵌入式容器中进行测试还很陌生。是否可以将例如 Mockito 的模拟作为 @EJB 依赖项注入到我的测试 bean 中?或者在这个设置中可能没有意义?

4

2 回答 2

3

您可以使用 Java SE / JPA 测试很多东西。但是我们称之为集成测试的主要部分将需要大量的努力来模拟事物,而如果没有Arquillian 或类似的帮助,有些是无法实现的。您希望您的 EJB 事务功能/等包含在您测试的内容中吗?如果是这样,您必须在尽可能接近生产的事务环境中实施测试。我强烈建议使用 ejb-testing-framework。

于 2012-05-29T20:16:09.800 回答
0

如果你想测试你的服务 bean,我认为一个好的方法是使用一些像 EasyMock 这样的模拟框架并模拟实体管理器,所以在这种情况下,你只测试你想要的代码,而不是整个代码。

您只需要向会话 bean 添加两个构造函数,一个是默认构造函数,一个具有它需要的依赖项,这样您就可以在那里提供模拟对象。

希望能帮助到你。

于 2012-05-29T20:16:24.060 回答