2010-02-21 42 views
2

在下面的例子中一個specifc順序運行JUnit測試套件,使用ANT

1. <target name="tests.unit"> 
    2. <junit> 
     3.  <batchtest> 
     4.  <fileset dir="tsrc"> 
     5.   <include name="**/Test*.java"/> 
     6.   <exclude name="**/tests/*.java"/> 
     7.  </fileset> 
     8.  </batchtest> 
     9. </junit> 
    10. </target> 
    11. <target name="tests.integration"> 
    12. <junit> 
    13.  <batchtest> 
    14.  <fileset dir="tsrc"> 
    15.   <include name="**/tests/Test*.java"/> 
    16.  </fileset> 
    17.  </batchtest> 
    18. </junit> 
    19. </target> 

如果我有幾個測試套件在** /測試/文件夾。如果我運行tests.integration目標,它將如何知道首先運行哪個測試套件?如果我有TestSuite1.java,TestSuite2.java和TestSuite3.java,我希望測試套件按照文件名中指定的順序運行。

回答

0

是的我想創建一個功能測試,而不是單元測試的測試套件。我試圖使用junit來構建功能測試包。我使用基於Junit的硒。

可以說我有一個網站,你不能做任何事情,而無需登錄。在這種情況下,我有一個測試用例來測試日誌功能,然後我會有另一個測試用例來測試別的東西。他們將執行會不要緊,因爲我無法登錄這之前測試任何東西的順序是指順序應該是

  1. TESTLOGIN
  2. TestCreateProduct
  3. TestReadProduct
在上面的測試案例

,我在創建之前無法讀取任何產品,並且我已登錄,並且在登錄之前無法創建產品。我已經看到很多關於使用setUp()和tearDown()方法的評論,但肯定會意味着很多重複。

例如,如果我必須使TestReadProduct測試用例獨立,則必須將TestLogin和TestCreateproduct功能置於TestCreateProduct測試用例的setUp()方法中。當然,這是一個維護噩夢。想象一下,必須保持5000個測試用例。如果TestLogin功能發生變化,我將不得不在很多地方進行很多更改。

我想在ANT中使用「depends」選項。

像這樣的事情

<target=TestReadProduct depends=TestLogin, TestCreateProduct> 

心不是有這樣做的更好的辦法?

1

除非有JUnit中的新功能,這是一個困難的事情。

TestNG可以使用相關組進行管理。

這裏有一個問題想問你:爲什麼順序有關係嗎?單元測試不應該有依賴關係。如果你這樣做,也許這些都是真正的集成測試。

FitNesse可能是更好的選擇。

1

您可以創建一個基礎測試類,將登錄名放在它的setUp()中,並從這個名字繼承所有測試用例(當然,還可以在任何地方撥打super.setUp())。

請注意,這隻會是一個簡單的登錄,而不是一個適當的單元測試。你應該用所有可能的瘋狂用戶輸入單元測試你的登錄功能,以及單獨的測試類中沒有的東西,但對於其餘的測試用例,你只需要用默認的用戶名或類似的簡單登錄。

對於那些在登錄頂端也需要產品的測試案例,您可以創建第二個基礎測試類,它將第一個基礎測試類擴展並將產品創建添加到其setUp()

沒有代碼重複 - 如果登錄更改,除了登錄測試用例本身,您需要更改測試代碼中的單個方法。

以這種方式執行5000個單元測試可能會更慢 - 但更安全得多。如果你開始依賴你的單元測試的執行順序,那麼你正在踩着滑坡。很難注意到,如果你的配置修改了它們的順序,你無意中在兩個單元測試之間引入了額外的依賴關係。例如。您可以在一個單元測試中設置產品的特定屬性或更改全局配置設置,然後在下一個測試用例中測試產品中的其他內容 - 而且它恰好適用,因爲之前的單元測試設置了特定的特定屬性辦法。這遲早會導致令人不快的驚喜。