2013-10-04 39 views
5

我已經寫了大量測試,不僅將其劃分爲單獨的類,而且還根據應用程序測試的區域將其分爲獨立的子包。所以,我的包結構看起來有點像這樣:按指定順序運行JUnit4測試類

my.package.tests 
my.package.tests.four 
my.package.tests.one 
my.package.tests.three 
my.package.tests.two 

my.package.tests包我有一個父類,一到四在子包中的所有測試擴展。現在,我想選擇測試運行的順序;不在類內(這似乎可能與FixMethodOrder annotation),但類或子包本身的順序(所以那些在子包one第一,然後那些在two,等)。有些測試課程使用Parameterized runner,以防萬一。選擇順序不是測試成功所必需的,它們是相互獨立的;但將它們排序以反映程序各部分的順序通常會有所幫助,因爲它使分析變得更容易一些。

現在,理想情況下,我希望有一些配置文件告訴JUnit應該在哪個順序執行測試;但我猜測它不會那麼容易。我在這裏有哪些選項,什麼是最簡單的選項?我還希望只列出子包,而不是包中的各種類,甚至是類中的測試函數。

我在使用Java 1.6.0_26(我沒有選擇)和JUnit 4.11。

回答

7

你可以用測試套件做到這一點。 (也可以「嵌套」這些)

@SuiteClasses({SuiteOne.class, SuiteTwo.class}) 
@RunWith(Suite.class) 
public class TopLevelSuite {} 

@SuiteClasses({Test1.class, Test2.class}) 
@RunWith(Suite.class) 
public class SuiteOne {} 


@SuiteClasses({Test4.class, Test3.class}) 
@RunWith(Suite.class) 
public class SuiteTwo {} 

......等等。使用「toplevelsuite」作爲入口點,測試將按照您定義@SuiteClasses陣列的順序執行。

對於一個類中的方法,你可以指定他們與@FixMethodOrder執行的(因爲你已經在你的問題中提到的順序。

+0

謝謝,這就像一個魅力!我想有沒有選項以某種方式告訴它「運行下列軟件包中的所有測試」,對嗎? – blalasaadri

+0

不,你不能自動告訴它包含所有的類(AFAIK,至少)。 – blgt

+1

這裏的一般想法是你可以在每個包中放置一個Suite類,它將包含該包中的所有測試,然後將「父」套件放置在父包中,並將其包含在其中,這樣您就可以模擬Suite類中的包層次結構。 – blgt