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

标签 java unit-testing jakarta-ee junit ejb

首先,这是我的设置:

  • 应用服务器: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 进行单元测试:

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

希望有帮助。

关于java - 需要有关 EJB3 bean 类型与单元测试的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13180688/

相关文章:

java - Wildfly 数据源与 DefaultDS 冲突

Java EE 7 自动计时器(EJB 计时器)不适用于 WildFly 8.1.0

java - mvn构建编译错误

java - 考虑以下算法的更优解决方案

安卓测试 : Target app vs Test app?

unit-testing - 单元测试 TelemetryProcessor 和 TelemetryInitializer(Application Insights)?

node.js - 我如何 stub Promise 以便我的测试可以同步运行?

java - JBoss 6 中实例之间共享属性文件

Java & LibGDX : Limit Rendering Range of a Sprite

java - ConcurrentHashMap 中 entrySet().removeIf 的行为