首先,这是我的设置:
- 应用服务器:jBoss 4.2.3GA
- 使用的框架:Struts 2、EJB3
- 数据库管理系统:PostgreSQL 9.0.3
默认情况下,出于安全目的,我总是将 bean 设置为 @Local。当不需要时,我不想打开同一容器内其他应用程序的大门。
现在,我专注于通过测试来驱动我的开发(测试驱动开发)。因此,我为我的测试创建了一个单独的项目(一种测试项目),以避免编写测试代码并在与应用程序相同的项目中安装测试工具(EasyMock、jUnit、StrutsTest 等)。
所以...这意味着我将 bean 设置为 @Remote,以便能够从 jUnit 测试类访问它们。
我的问题是:有没有办法使用某种条件编译/构建从@Local切换到@Remote?每次都必须将我的bean设置回本地是相当麻烦和无聊的。每个开发人员都知道重构会带来问题,因此我试图找到一种适当的方法来管理我的 bean 的可见性。另一个想法是来自属性或 XML 文件,这样我只需要根据我的需要打开或关闭一项内容。
对于每个要测试的 bean,我需要: - 将接口(interface)设置为@Remote - 在 session bean中添加远程接口(interface)的implements项
有什么想法吗?
非常感谢
查尔斯
最佳答案
如果我理解得很好,您可以从单元测试连接到应用程序服务器来访问远程 EJB,对吗?
我已经有几年没有使用 EJB 了,但是有两种方法可以在没有远程通信的情况下对 EJB 进行单元测试:
- 使用嵌入式容器,请参阅 Embedding EJB 3.1 Container Into Your Unit Tests
- 您将 EJB 用作普通 java 类并自己模拟依赖项,请参阅 Unit Testing for Java EE 。您可以配置模拟以返回特定事件的特定值。
希望有帮助。
关于java - 需要有关 EJB3 bean 类型与单元测试的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13180688/