天天看點

《JUnit實戰(第2版)》—第2章2.4節用Suite來組合測試

本節書摘來自異步社群《junit實戰(第2版)》一書中的第2章2.4節用suite來組合測試,作者【美】petar tahchiev , felipe leme , vincent massol , gary gregory,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

2.4 用suite來組合測試

junit實戰(第2版)

因為是一個簡單的測試,是以你可以直接編譯如代碼2.1所示的簡單的電腦測試程式,并把它交給控制台façade運作器,如下所示:

《JUnit實戰(第2版)》—第2章2.4節用Suite來組合測試

如果類路徑配置正确的話,那麼測試應當順利運作。這非常簡單—至少運作這麼一個單獨的測試用例是非常簡單的。

2.4.1 組合一組測試類

下一步就是運作多個測試類。為了簡化這個任務,junit提供了測試suite。這個suite是一個容器,用來把幾個測試歸在一起,并把它們作為一個集合一起運作。

junit設計suite的目的就是為了運作一個或者多個測試用例。測試運作器會啟動suite;然後運作哪個測試用例是由suite來決定的。

你可能會疑惑,在第1章最後給出的那個示例中,你并沒有定義一個suite,這個示例是如何運作起來的呢?為了使簡單的事情可以保持簡單,如果你沒有提供一個自己的suite,那麼測試運作器會自動建立一個suite。

預設的suite會掃描你的測試類,找出所有以@test注釋的方法。預設的suite會在内部為每個@test方法建立一個測試類的執行個體。然後junit就會獨立地執行每個@test方法,以避免潛在的負面影響。

如果你想将另一個測試添加到calculatortest類,比如testsubtract,同時你使用@test注釋這個測試,那麼預設的suite就會自動包含這個測試。

suite對象其實是一個runner,可以執行測試類中所有@test注釋的方法。

代碼2.3顯示了如何将多個測試類組合成一個單獨的測試集(test suite)。

代碼2.3 将測試類組合為一個suite

《JUnit實戰(第2版)》—第2章2.4節用Suite來組合測試

https://yqfile.alicdn.com/7682d282dcf8ff176ce70e97480582693102def7.jpeg" >

在代碼2.3中,我們使用@runwith注釋指定了相應的運作器..lucene實戰1.tif,并且通過在@suiteclasses注釋中指定測試類,來列出我們想要在這個測試中包含的所有測試..lucene實戰2.tif。這些測試類中的所有@test方法都将包含到該suite中。

對于代碼2.1中的calculatortest而言,預設的suite可以用以下代碼來表示:

《JUnit實戰(第2版)》—第2章2.4節用Suite來組合測試

2.4.2 組合一組測試集

由于junit采用了一種精妙的建構方式,是以使用junit來建立一組測試集也就成為了可能。例如,代碼2.4串聯了幾個不同的檔案,以展示多個測試用例是如何組合成多個測試集,然後這些測試集又組合成了一個主測試集。

代碼2.4 一組測試集

《JUnit實戰(第2版)》—第2章2.4節用Suite來組合測試

為了簡化這個示例,我們的測試集testsuitea與testsuiteb分别隻有一個測試用例。而真正的測試集應該包含多個測試類,就像我們的主測試集。

你可以運作這段代碼中的任何一個類,比如一個junit測試、兩個測試類中的任意一個、兩個測試集中的任意一個,甚至是主測試集。圖2.2展示了在eclipse中運作主測試集後的結果。

《JUnit實戰(第2版)》—第2章2.4節用Suite來組合測試

測試集提供了一種強有力的組織測試的方式。當然,這種便利性并非junit獨有,在下一小節中你将會看到,其他工具也具有這樣的功能,這将使我們重新考慮任何junit測試集的建立。

2.4.3 suite、ide、ant與maven

ant與maven也提供了運作多組測試類和測試集的功能,你可以通過正規表達式的類型、要運作的測試類和測試集的名稱來指定運作哪些測試類和測試集。另外,有些ide(比如eclipse)允許你在某個指定的包或者源代碼目錄中運作所有的測試類與suite。這足以讓我們重新考慮是否值得在最初的地方建立junit的suite。

當然,如果你想在java環境中組織你的測試,而不依賴于你的構件系統能力,那麼junit的suite是非常有用的。因為一般情況下建構系統都是由專門的人員或者團隊來維護,而不是開發者自己。同樣,你可能不希望依賴于任何指定的ide以及它的junit內建能力。

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。

繼續閱讀