需要有关EJB3 bean类型与单元测试的建议

时间:2012-11-01 15:51:11

标签: java unit-testing java-ee junit ejb

首先,这是我的设置:

  • App server:jBoss 4.2.3GA
  • 使用的框架:Struts 2,EJB3
  • DBMS:PostgreSQL 9.0.3

默认情况下,为了安全起见,我总是将我的bean设置为@Local。当不需要时,我不想在同一个容器内打开其他应用程序的大门。

现在,我专注于通过测试(测试驱动开发)推动我的开发。因此,我为我的测试创建了一个单独的项目(一种测试项目),以避免编写我的测试并在与应用程序相同的项目中安装测试仪器(EasyMock,jUnit,StrutsTest等)。

所以......这意味着我将我的bean设置为@Remote,以便能够从我的jUnit测试类中访问它们。

我的问题是:有没有办法使用某种条件编译/构建从@Local切换到@Remote?每次必须将我的bean设置回Local是非常麻烦和无聊的。每个开发人员都知道重构会带来问题所以我试图找到一种正确的方法来管理我的bean的可见性。另一个想法是来自属性或XML文件,所以我只需要根据我的需要打开或关闭一件事。

对于要测试的每个bean,我需要:   - 将接口设置为@Remote   - 在会话bean中添加远程接口的implements项

有什么想法吗?

非常感谢

查尔斯

2 个答案:

答案 0 :(得分:2)

如果我理解的话,你从单元测试连接到应用服务器以访问远程EJB,对吗?

几年以来我一直没有使用过EJB,但是有两种方法可以在没有远程通信的情况下对EJB进行单元测试:

  1. 使用嵌入式容器,请参阅Embedding EJB 3.1 Container Into Your Unit Tests
  2. 您将EJB用作普通的java类并自行模拟依赖项,请参阅Unit Testing for Java EE。您可以配置模拟以返回特定事件的特定值。
  3. 希望它有所帮助。

答案 1 :(得分:0)

另一种选择,而不是使用嵌入式容器
(JBoss嵌入式容器的形状非常糟糕,我很害怕:()
是使用具有部署API的Arquilian工具,可以创建通过测试代码生成的“迷你企业应用程序”,以包含EJB并将其部署在应用程序服务器上。