2011-02-07 74 views
4

我公司在過去的7年中開發了一箇中/大型Web應用程序。該應用程序使用Spring Framework(3.0),Hibernate(3.x)和Struts(1.x)等。不幸的是,我們沒有使用任何類型的自動測試。現在我們需要添加它們以避免迴歸錯誤並開始更好的開發生命週期。 按照此艱苦工作的最佳實踐,我讀過我們可以從煙霧測試開始,然後在添加單元測試之前進行集成測試。 所以我的問題是:關於集成測試(在容器中)這是Spring TestContextFramework和JBoss Arquillian之間的區別?我讀過Arquillian將在它的最終版本中支持Spring(http://community.jboss.org/message/563768)。使用它一旦穩定後會有某種好處嗎?Spring TestContext框架和Jboss Arquillian之間的區別

感謝, 斯特凡諾。

回答

1

我從來沒有用過的Arquillian,但它似乎重點集中在EJB測試上部署到現場容器。如果您的應用程序基於Spring(+ Hibernate),則Spring Test支持可能是最佳選擇。

在測試情況下,你可以開始嘲笑內存數據庫的應用程序上下文(只有一小塊或幾乎整個應用程序)的一部分。你不需要一個正在運行的容器,因爲Spring大多是獨立的。測試Struts 1.x的操作比較困難,但我想Arquillian也不會幫助你。

此外,如果軟件的穩定性是你的關心,的Arquillian似乎是在Alpha版本了。但是我肯定會給它一個機會,我將不得不測試基於EJB的應用程序。對於Spring應用程序,通過上下文緩存,測試中的事務劃分等.TestContext框架是最佳選擇。

邊注:考慮使用替代的JUnit TestNG的,因爲它玩弄的TestContext,例如更漂亮你可以在setup/teardown方法中訪問Spring beans(在JUnit中是靜態的)。

+0

我同意這個問題。我自己並沒有使用Arquillian,但是需要部署到容器來運行測試的想法聽起來很糟糕。如上所述,使用Spring TestContext,您可以初始化應用程序,運行單個測試,在無需重新部署的情況下進行更改(儘管您可能需要重新啓動TestContext)。另外,我不知道你計劃在Struts上運行什麼類型的測試,但是如果你正在進行功能測試,你可以方便地在任何Web框架上運行Selenium測試。你也可以通過Spring TestContext運行Selenium來訪問相同的數據庫: – 2011-03-01 14:32:24

1

我自己是Arquillian用戶,但我建議你堅持Spring的解決方案。雖然最終它將是容器不可知論的,但現在這個工作集中在Java EE上。你的工作似乎很難,我現在不會推薦阿基裏安。

然而,澄清一些混亂,你可以在運行的Arquillian嵌入式測試。它可以引導嵌入式Glassfish或JBoss AS服務器,並使用「真實事物」而不是模擬或替代實現來運行測試。 JPA,攔截器,JTA,XA數據源,JMS,JSF,Servlet。包括所有可用的電池;)

或者,您可以在後臺啓動一個JBoss實例並遠程運行測試。 Arquillian負責部署/測試/解除部署週期 - 並且速度非常快!

1

我從來沒有使用過任何人,但這裏是我總結的單證的:

## Spring集成測試##

Spring允許無需部署執行一些集成測試應用服務器

Spring的單元測試集成測試支持由了Spring TestContext框架,這是不可知的使用的測試框架(JUnit的,TestNG的,等等)提供。

TestContext框架提供:

  • ApplicationContext S的一貫加載和WebApplicationContext S以及緩存的上下文。 [1]

  • 任選通過 依賴注入配置你的測試類的實例。 [2]

  • 爲事務測試提供事務管理:框架將爲每個測試創建和回滾事務。

  • 提供抽象類,可以由開發人員很容易代碼的JUnit或TestNG的測試用例類來擴展。

##的Arquillian ##

的Arquillian運行的實際運行環境,其生命週期是由管理的Arquillian內部集成測試。 的確與的Arquillian,您的集成測試,無論是容器內部執行,或用容器作爲客戶端交互。

容器可以是:

  • 嵌入式或遠程Servlet容器(例如,Tomcat的,碼頭),
  • Java EE應用服務器(例如,GlassFish的,JBoss應用服務器,嵌入式GlassFish的),
  • 一個Java SE CDI環境
  • 或任何其它容器的實現提供

的Arquillian:

  • 管理容器的生命週期(啓動/停止),

  • 束與依賴性的類和資源測試類成 部署存檔,

  • 增強了測試類(例如,解決@注入,@EJB和@Resource 注射),

  • 部署檔案到測試(部署/取消部署),

  • 捕獲結果和失敗。

#如何它的工作原理#

的Arquillian提供了JUnit和TestNG的自定義測試運行。

  1. 當你運行你的測試,這個定製的測試亞軍將檢測@RunWith Arquillian聲明。
  2. 自定義測試運行器將因此將測試執行生命週期的控制從單元測試框架(JUnit或TestNG)轉換爲Arquillian。

  3. 對於每個測試例:

    1. 的Arquillian將使用拆封創建 「微檔案」。 ShrinkWrap允許的類路徑控制使Arquillian能夠聲明性地定義一個定製的Java EE歸檔文件,它封裝了測試類及其相關資源,但僅此而已!這使您可以精確地控制您正在測試的內容以及測試執行時可用的資源。
    2. Arquillian將每個「微型歸檔」部署到目標容器(在maven配置文件中配置),我假設一個接一個。
    3. 然後它協商測試方法的執行並使用與服務器的遠程通信捕獲測試結果。
    4. 最後,Arquillian取消了測試存檔。
相關問題