2012-06-21 19 views
2

我有一個運行在WebSphere 7上的Java EE應用程序(使用IBM RAD 7.5/Eclipse)。如何編寫一個可以看到我的EJB服務的JUnit測試?

它基本上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"; 

    /* ... */ 
} 

任何建議都非常感謝!

羅布

回答

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

+0

你還在使用這個解決方案還是你搬到了Arquillian?在這種情況下,我想問你如何處理EJB中存在的依賴關係。 – narko

3

請使用嵌入式容器來解決您的問題,或考慮使用Arquilian這項任務。 Arquillian將允許您在運行中(即通過代碼)構建「Java EE部署」,並使用Arquilian將其部署到應用程序服務器,以便您可以運行JUnit並通過JUnit在服務器上運行代碼試驗。

0

我已創建了createEJBStub腳本maven-plugin wrapper

爲什麼?

這使我們能夠構建測試maven項目,作爲我們CI配置的一部分,在部署後針對我們的應用程序運行。

與Maven更具體地在一起,這讓我們的測試項目:

  1. 利用Maven的依賴管理來拉我們發佈到我們的內部關係庫的API罐子
  2. 爲部分創建存根類「生成源」maven生命週期
  3. 運行junit測試用例針對具有EJB的應用程序服務器進行集成測試。