2009-09-29 65 views
6

我正在尋找一種將TDD應用於會話Bean的方法。單元測試EJB

任何人都可以提供意見和鏈接如何進行單元測試?

如何使用JUnit來做到這一點?

P.S:我是新來的測試驅動開發和會話Bean。

我正在使用EJB v2。

回答

8

我假設你在談論EJB2.x會話Bean。對於這些動物,我喜歡做的是:

  • 使用會話Bean作爲一個包裝器,它只是將邏輯委託給一個POJO,您可以在一個容器之外輕鬆地進行測試。外容器內測試是更好,更快,更方便等,但不包括的東西,如部署描述符驗證- 和/或 -
  • 使用類似Cactus的容器內測試(檢查Howto EJB文檔)- 和/或 -
  • 構建和部署用於集成測試的Cargo的EJB模塊。
+0

+1 - 爲了您的最後兩個建議,我已經很多年沒有想過仙人掌。:) – 2009-09-29 15:09:08

+0

其實,我沒有使用仙人掌多年:) – 2009-09-29 16:10:43

+0

我試圖設置使用仙人掌,但我真的不明白!我覺得安裝太困難了。我正在使用Eclipse和NetBeans。 – Attilah 2009-10-01 14:03:06

5

你不說你正在使用哪個版本的EJB。如果是EJB v3,請查看Ejb3Unit。從網站:

Ejb3Unit是一個JUnit的推廣與能夠執行自動的獨立的JUnit測試 所有EJB 3.0符合Java EE的 項目。 由於容器測試方法的不足導致構建測試周期變短,因爲不再需要容器部署,因此不再需要 。

不過,我會主張從EJB特有的功能中分離出來。這將允許您測試容器外的複雜功能,而不使用上述框架。大部分測試將測試POJO(普通的舊Java對象),而相對較少的測試將專注於持久性框架測試。

編輯:所以,如果你使用EJB V2,那麼顯然忽略第一點。然而,第二點仍然有效。

2

我目前使用apache openejb作爲單元測試的嵌入式容器。雖然這是一個EJB3/JPA項目,但它對EJB2應該是一樣的。爲了引導容器在測試中,你只需要創建以後可以用它來查找EJB和數據源的InitialContext對象:

Properties props = new Properties(); 
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory"); 

// a DataSource named "mysql" 
props.put("mysql", "new://Resource?type=DataSource"); 
props.put("mysql.JdbcDriver", "com.mysql.jdbc.Driver"); 
props.put("mysql.JdbcUrl", "jdbc:mysql://localhost:3306"); 
props.put("mysql.JtaManaged", "true"); 
props.put("mysql.DefaultAutoCommit", "false"); 
props.put("mysql.UserName", "root"); 
props.put("mysql.Password", "root"); 

Context context = new InitialContext(props); 
LocalInterface local = (LocalInterface)context.lookup(localInterfaceName + "BeanLocal"); 
DataSource ds = (DataSource)context.lookup("java:openejb/Resource/mysql"); 

編輯:有在「測試技術」部分更多的文檔以http://openejb.apache.org/3.0/index.html

+0

你能否給我提供一個關於此教程的好教程的鏈接?似乎很有希望 – Attilah 2009-10-01 14:09:07