2012-05-29 23 views
0

我有一个使用EJB3和JPA的JEE5应用程序。例如我有一些豆与使用独立JPA测试EJB3/JPA可以吗?

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 

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

@PersistenceContext, @PersistenceUnit, @TransactionAttribute 

功能可用。所以我的问题是如果这是值得尝试的(手工交易管理等)?或者我应该使用嵌入式容器?我正在谈论集成测试(与真实的,但内存中的数据库),而不是嘲笑所有的东西。

编辑:因为我很新的嵌入式容器内测试

一两件事。是否有可能注入例如Mockito的模拟作为@EJB依赖于我的bean在测试?或者在这个设置中没有意义?

+0

出于好奇,您希望避免在EJB容器中测试什么?注意所有符合Java EE 6的容器都实现了EJB 3.1嵌入式EJB容器API,而不仅仅是OpenEJB。 –

+0

@David Blevins由于他被困在JEE5中,但是是的,这有点复杂。 – esej

+0

@David,除了事实上我有JEE5(但我仍然可以使用OpenEJB),没有什么能够阻止我。我只是想知道,如果使用JPA从任何容器测试EJB是否有意义,如果它最初存在于容器中并使用它的功能(如事务,注入等)。 – grafthez

回答

3

你可以用Java SE/JPA测试很多东西。但是,我们称之为集成测试的一大部分将需要大量的努力来模拟事情,有些只有在没有Arquillian或类似的帮助时才可行。你希望你的EJB事务功能/等被包含在你测试的东西中吗?如果是这样,你必须在尽可能接近生产的情况下执行生活在交易环境中的测试。我强烈建议使用ejb-testing-framework。

+0

因此,如果您必须使用JPA编写EJB3以用于一些复杂查询,交易,你会去与嵌入式容器或arquillian而不是独立的env? – grafthez

+0

个人而言,我一定会和Arquillian一起工​​作,但那是因为我喜欢在Arquillian中开发“内部”,我基本习惯于几乎依赖于在Arquillian中为他们编写“单元测试”的同时开发我的Enterprise Bean。目前需要45-115秒才能将项目完全部署到glassfish(“在Netbeans/Eclipse中”),执行典型的Arquillian测试用例(从“NetBeans/Eclipse内”执行)需要16-25秒。一些Arquillian测试案例存活并演变为集成测试。这是JEE6/EJB 3.1我会为3.0做它。 – esej

+1

如果我想要测试JPQL查询/所有特定JPA的东西,我不会使用任何一个 - 但是,只要我们对JTA事务感兴趣,就不适用。 – esej

0

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

你只需要在你的会话bean中添加两个构造函数,一个是默认值,另一个是需要的依赖项,那么你可以在那里提供模拟对象。

希望它有帮助。

相关问题