2011-03-31 90 views
0

我想知道如果它完全可能通過ant停止在特定的測試。 EX:我有以下樹結構:有沒有辦法在junit ant

test 
    package1 
    TU_file1.java 
    TU_file2.java 
    package2 
    TU_file3.java 
    TU_file4.java 

如果我通過JUnit的運行ant我想知道,有沒有辦法,我可以運行文件1,2,3,並停在那兒。我希望能夠在運行第四個失敗的測試單元之前獲取數據庫。在第四次測試之前,我想要一個完美的環境。有沒有辦法用文件集或模式集來實現這一點。我知道有failonerror選項,但我不希望它運行第四次測試。

謝謝!

+0

你爲什麼不能復位/初始化測試用例程序在安裝數據庫(@BeforeClass或設置()..)? – oers 2011-03-31 20:19:32

+0

問題是數據庫在tearDown()方法中沒有正確清理,有時很難找到哪個代碼留下不好的代碼。我想要一種方法來獲取測試前所運行的所有內容的快照並調試測試單元。 – Steve 2011-04-01 19:14:35

回答

0

的螞蟻的解決方案是一個文件集添加到junit任務:

<fileset dir="${src.tests}"> 
    <include name="**/TU_file*.java"/> <!-- or some other all inclusive pattern --> 
    <exclude name="**/package2/TU_file4.java"/> <!-- exclude TU_file4.java --> 
</fileset> 

一個JUnit 4.x的解決方案是將@Ignore標註添加到要排除任何測試。

編輯:如果要在TU_file4執行之前暫停執行,請添加一個@BeforeClass方法,該方法等待來自System.in的輸入。

+0

我不想排除這個問題的測試單元。我希望它在碰到TU_file4.java之前饒恕它,而不是繼續。該解決方案僅僅是排除測試單元。我想確保上面的其他測試單元沒有做某種清理或拆卸。如果我只有4個文件,並且它們都是TU_file?.java,這在技術上是可行的,但不幸的是,這只是一個示例場景。 – Steve 2011-03-31 12:46:42

0

在您的Ant構建文件中,當調用<junit>任務時,您可以讓它包含一個<fileset>元素,該元素可以定義通過模式匹配運行哪些測試。舉個例子,你可以定義<fileset>內的資源來明確排除TU_file4.java。有關更多詳細信息,請參閱Apache documentation for the Ant JUnit Task

也就是說,你的單元測試的最佳實踐是,他們完成後不應該留下任何後面的東西。

+0

我相信上面的一些測試裝置可能會留下一些不需要的物品,這就是爲什麼我想在第四次測試前饒恕測試裝置,做一些基本的分析,看看是否有什麼東西留下。 – Steve 2011-03-31 12:53:15

+0

如果您自己運行測試,會發生同樣的事情嗎?或者如果你用手按順序擦試驗?這將是兩種替代方法,以達到你想要的位置。祝你好運! – 2011-04-01 03:01:38

+0

如果我單獨運行測試,它會通過,但如果我運行多個測試它將失敗。我認爲這是由於一些靜態列表,它們爲JVM保存緩存的值,這會導致問題。 – Steve 2011-04-06 22:57:50

0

您是否考慮過java調試模式?這可能是通過遠程調試在斷點處停止執行的好選擇。

例如爲:

編輯:

一套應始終運行在您指定的順序。 如果你想排序@Test方法,你必須創建一個自己的TestRunner(擴展BlockJUnit4ClassRunner#computeTestMethods)。 僞代碼:

@Override 
    public List computeTestMethods() 
    { 
    List myList = super.computeTestMethods(); 
    Collections.sort(myList, new MyTestMethodComaparator()); 
    return myList; 
    } 
+0

我試着在eclipse中運行所有的測試單元,唯一的問題是在eclipse和ant中的排序是不同的。 Ant按字母順序排列順序,而eclipse以某種隨機順序排列。如果月食像螞蟻一樣按字母順序做的話,那將是完美的。 – Steve 2011-04-01 22:58:07

+0

您可以使用套件來確保測試的順序。套件類總是以給定的順序執行。 排序測試 - 方法有點複雜,並由junit理論阻止:)。我通過編寫我自己的TestRunner並覆蓋computeTestMethod()方法來完成此操作。 – oers 2011-04-03 09:31:23

+0

我不認爲eclipse有辦法以特定的順序運行junit測試,比如根據測試單元包名稱的字母順序。這可以幫助我調整螞蟻的方式。 – Steve 2011-04-06 22:58:54