2010-02-22 103 views
6

我有一個JUnit 4測試套件,它具有BeforeClass和AfterClass方法,用於爲以下測試類進行設置/拆卸。 我需要的是由他們自己運行測試類,但爲此我需要爲每個測試類設置/拆卸場景(BeforeClass和AfterClass或類似的東西)。問題是,當我運行套件時,我不想在每個測試課前後執行setup/teardown,我只想執行測試套件中的setup/teardown(一次)。 這可能嗎?提前致謝。Junit 4測試套件和單個測試類

回答

4

我不知道任何標準的方式來與JUnit做到這一點。正如你可能已經知道的那樣,它的原因是你的測試用例應該彼此獨立運行。這涉及在每種測試方法之前和之後運行的「正常」設置/拆卸方法。課堂設置和拆解雖然有點不同 - 儘管我仍然更喜歡獨立運行測試並且避開麻煩區域。然而,如果你真的確信自己在做什麼,你可以使用全局標誌來表示是否運行類設置/拆卸,並在類設置/拆卸方法中檢查其狀態。在你的測試套件中,你可以包含一個特殊的類作爲第一個類,它只是執行設置並設置全局標誌來向真實的測試用例表明它們的類設置/拆卸方法不能運行。同樣,套件中特殊的最後一個類可以執行拆卸代碼。需要注意的是,我擔心JUnit不能保證套件內測試類的執行順序,儘管它很可能會按照指定的順序執行它們 - 但這只是一個實現細節。試試看,它可能適用於你 - 但不能保證它會始終按照你的期望做。

+2

感謝您的回答,我居然想到了這一點,但我想也許有一個更好的解決方案。我想做什麼的原因是因爲安裝程序清理環境並重置數據庫,所以需要一些時間,這就是爲什麼我不想運行每個測試類的設置,但我需要當我運行個人測試。 – Hypnus 2010-02-22 11:38:11

3

如果您有jUnit 4.7+,我建議您查看稱爲規則的新功能(在this blog post中進行了說明)。他們可能不是你想要的,但他們可能是你用jUnit得到的最好的。

假設TestNG有更好的測試分組的可能性,但我還沒有真正考慮過它自己呢。

0

不,在JUnit中沒有標準的方法來做到這一點,儘管你可以像PéterTörök建議的那樣攻擊一些東西。

但請注意,您或多或少會濫用JUnit來執行此操作。整個單元測試它是彼此獨立的。這是因爲測試之間的依賴關係會產生一個完整的維護噩夢(測試失敗,因爲按錯誤順序運行)。

所以我建議你認真考慮,如果它是不是更好,只是始終運行安裝...

+0

謝謝,編號確實考慮過,但設置的時間比所有測試類的孔測試長得多:) – Hypnus 2010-02-22 11:33:38

+0

我覺得你的痛苦:-(。如果實際上也必須這樣做,對於複雜設置的測試雖然它只是每個班級),某種「我已經初始化」的標誌可能是你最好的選擇。 – sleske 2010-02-22 14:49:43