我有一个使用带有JPA的EJB3的JEE5应用程序。例如,我有一些豆子
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
我想为这些服务编写一些测试。我知道我可以使用像OpenEJB这样的可嵌入容器,但是由于JPA可以在Java SE中使用,我想知道我是否可以在测试中使用它? 当然,我不会拥有所有的
@PersistenceContext, @PersistenceUnit, @TransactionAttribute
可用功能。所以我的问题是,这是否值得尝试(手工制作的交易管理等)?或者我应该使用嵌入式容器?我在谈论集成测试(使用真实的内存数据库),而不是模拟所有内容。
修改
还有一件事,因为我对嵌入式容器中的测试很陌生。有可能注射例如Mockito的模拟作为我测试的bean的@EJB依赖?或者在这个设置中没有意义?
答案 0 :(得分:3)
您可以使用Java SE / JPA测试很多东西。但是我们称之为集成测试的主要部分需要大量的工作来模拟事物,而有些部分在没有Arquillian或类似帮助的情况下是不可行的。您是否希望EJB事务功能/ etc包含在您测试的内容中?如果是这样,您必须实现尽可能接近生产的事务环境中的测试。我强烈建议使用ejb-testing-framework。
答案 1 :(得分:0)
如果你想测试你的服务bean,我认为一个好的方法是使用一些像EasyMock这样的模拟框架并模拟实体管理器,所以在这种情况下你只测试你想要的代码而不是整个东西
您只需要在会话bean中添加两个构造函数,一个是默认值,另一个是它需要的依赖项,然后就可以在那里提供模拟对象。
希望它有所帮助。