2013-10-04 38 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