我有一个在WebSphere 7上运行的Java EE应用程序(使用IBM RAD 7.5 / Eclipse)。
它基本上是user.JSP - > UserServlet - > @Stateless UserService - > UserDAO - >甲骨文
我想为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";
/* ... */
}
非常感谢任何建议!
罗布
答案 0 :(得分:3)
请使用嵌入式容器解决您的问题,或考虑使用Arquilian来完成此任务。 Arquillian将允许您动态构建“Java EE部署”(即 - 通过代码)并使用Arquilian将其部署到您的应用程序服务器,这样您就可以运行JUnit,并在您的服务器上实际运行代码通过你的JUnit测试。
答案 1 :(得分:1)
在一天结束时,我的解决方案是我为要从JUnit测试的EJB添加了一个远程EJB接口。
我创建了一个新的“应用程序客户端项目”并将我的JUnit测试放在那里。我的JUnit测试执行EJB的远程查找。似乎工作正常。
但是,使用WebSphere 7,我必须使用createEJBStubs命令来生成所需的存根。更多细节在这里和这里:
答案 2 :(得分:0)
我为createEJBStub脚本创建了一个maven-plugin wrapper。
<强>为什么吗
这允许我们构建测试maven项目,这些项目在部署后针对我们的应用程序作为CI设置的一部分运行。
更具体地说,与maven一起,这允许我们的测试项目: