2

我有一个在 WebSphere 7 上运行的 Java EE 应用程序(使用 IBM RAD 7.5 / Eclipse)。

它基本上是 user.JSP -> UserServlet -> @Stateless UserService -> UserDAO -> Oracle

我想为 UserService 编写一些 JUnit 测试。

我从 Eclipse 中启动应用程序,它在 WebSphere 上运行。我在 Eclipse 的一个新 Java 项目中有一个 JUnit 测试。我的问题是,我的 JUnit 测试如何访问对 UserService 的引用?

有没有办法让我做类似 @EJB 注释的事情:

public class UserTests extends TestCase {

  @EJB  
  private UserServiceLocal userService;

  public void test1() throws Exception {
    Assert.assertTrue("userService is not null", (userService != null));
  }

}

这是我的 UserService 的基本版本:

@Stateless
public class UserService implements UserServiceLocal {

  @EJB
  private UserDAOLocal userDAO;

  /* ... */
}

注意:@EJB 不注入任何东西。

注意:userService = (UserServiceLocal)new InitiatContext().lookup(UserServiceLocal.JNDI);也不起作用,说“NamingManager.getURLContext 找不到该方案的工厂:ejblocal”

@Local
public class interface UserServiceLocal {

  public static final String JNDI = "ejblocal:com.myapp.service.UserServiceLocal";

  /* ... */
}

任何建议都非常感谢!

4

3 回答 3

2

请使用嵌入式容器来解决您的问题,或考虑使用 Arquilian 来完成此任务。Arquillian 将让您即时构建“Java EE 部署”(即通过代码)并使用Arquilian将其部署 到您的应用程序服务器,因此您将能够运行 JUnit,并通过您的 JUnit 测试在您的服务器上实际运行代码.

于 2012-06-21T19:06:10.743 回答
1

归根结底,我的解决方案是向要从 JUnit 测试的 EJB 添加一个远程 EJB 接口。

我创建了一个新的“应用程序客户端项目”并将我的 JUnit 测试放在那里。我的 JUnit 测试对 EJB 进行远程查找。似乎工作正常。

但是,使用 WebSphere 7,我必须使用 createEJBStubs 命令来生成所需的存根。更多细节在这里和这里:

http://www-01.ibm.com/support/docview.wss?uid=swg21393419

http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Frejb_3stubscmd.html

于 2012-06-22T17:25:37.143 回答
0

我为 createEJBStub 脚本创建了一个maven-plugin 包装器。

为什么?

这使我们能够构建测试 maven 项目,这些项目作为 CI 设置的一部分在部署后针对我们的应用程序运行。

更具体地说,与 maven 一起,这使我们的测试项目能够:

  1. 利用 Maven 依赖管理将我们发布的 API jar 提取到我们的内部 nexus 存储库
  2. 创建存根类作为“生成源”maven 生命周期的一部分
  3. 使用 EJB 针对应用程序服务器运行 junit 测试用例以进行集成测试。
于 2013-05-08T17:07:56.937 回答