1

首先,这是我的设置:

  • 应用服务器:jBoss 4.2.3GA
  • 使用的框架:Struts 2、EJB3
  • 数据库管理系统:PostgreSQL 9.0.3

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

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

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

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

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

任何的想法?

非常感谢你

查尔斯

4

2 回答 2

2

如果我理解得很好,您可以从单元测试连接到应用程序服务器以访问远程 EJB,对吗?

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

  1. 使用嵌入式容器,请参阅将EJB 3.1 容器嵌入到您的单元测试中
  2. 您将 EJB 用作普通的 java 类并自己模拟依赖项,请参阅Java EE 的单元测试。您可以配置模拟以返回特定事件的特定值。

希望能帮助到你。

于 2012-11-01T15:58:17.083 回答
0

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

于 2012-11-01T18:28:22.493 回答