2012-02-27 71 views
2

我使用的是IBM RAD 7(又名的Eclipse 3.4)和WebSphere 7針對EJB編寫JUnit測試的「正確」方式是什麼?

我有一個包含@Stateless EntityService@Stateless EntityDAO等EJB項目。

我有一個包含看起來了EntityService這個JNDI URL一個JAX-RS RESTful Web服務的Web項目:

ejblocal:entityEAR/entityEJB.jar/[email protected] 

這一切的偉大工程。

我的問題是,什麼是「正確」的方式來寫的JUnit測試測試EntityServiceEntityDAO類?由於系統需要在WebLogic服務器上運行才能運行,我以爲我會讓應用程序運行,然後啓動JUnit測試,該測試會查找與Web服務使用的JNDI相同的內容,但是我得到一個錯誤:

Naming Manager ... getURLContext cannot find the factory for this scheme: ejbLocal

任何建議是有用的,我應該怎麼寫方法JUnit測試?

回答

2

如果你正在編寫單元測試,那麼它們不應該依賴於容器(因爲它們只能在JVM中執行),所以你不能在它們中執行JNDI查找。要使用JUnit測試EJB Bean和DAO,Mocking Framework(如EasyMock)可以提供很大的幫助。

但是,如果您有興趣測試EJB和REST服務之間的通信,那麼您需要集成測試,並且我懷疑JUnit可以幫助您。集成測試的一個流行工具是Selenium,您需要一個功能齊全的容器和環境來執行測試。

1

一般來說,JUnit打算編寫單元測試。在單元測試中,您需要驗證具有單一職責的單個組件的工作(至少它應該有單一職責:)) - 所有依賴都以某種方式被模擬(easymock,mockito等)。 在EJB中使用的依賴注入簡化了這個過程 - 您可以使用new運算符(您不需要容器)在單元測試setUp()方法中實例化bean,然後注入模擬依賴(與容器注入真正依賴的方式相同)。 這是我使用的方法。另一件事是集成測試,它驗證整個場景 - 從web服務(或其他遠程外觀方法)調用開始,通過bean邏輯,直到數據庫查詢。但是,在這種情況下,您不會驗證站點在webservice/facade之後的組件。只是Web服務輸出的具體輸入。

好的方法是先寫測試(開始時失敗),然後編寫實現來滿足它。對於單元測試(單個bean,測試不在容器中運行),我建議使用JUnit和EasyMock/Mockito。對於集成測試,您可以使用Selenium或JUnit + OpenEJB作爲測試的簡單容器的一種形式(特別是如果您以EJB組件形式具有遠程外觀)。此外,使用像SoapUI這樣的工具,您可以爲您的web服務創建完整的測試場景 - 發佈一些數據,獲取它們,修改,放置,獲取,刪除等等。

相關問題