按指定顺序运行JUnit4 Test类

bla*_*dri 7 java junit unit-testing junit4 java-6

我已经编写了许多测试,不仅分为不同的类,而且根据我们正在测试的应用程序的哪个区域划分为单独的子包.所以,我的包结构看起来有点像这样:

my.package.tests
my.package.tests.four
my.package.tests.one
my.package.tests.three
my.package.tests.two
Run Code Online (Sandbox Code Playgroud)

my.package.tests包中我有一个父类,子包中的所有测试都是一到四个扩展.现在,我想选择运行测试的顺序; 不在类中(这似乎可以通过FixMethodOrder注释)但是类或子包本身的顺序(所以那些在子包中one,然后在那些中two,等等).一些测试类使用参数化运行器,以防万一有所不同.测试成功不需要选择顺序,它们是相互独立的; 然而,对它们进行排序以反映通常使用程序的各个部分的顺序是有帮助的,因为它使分析更容易一些.

现在,理想情况下我想要一些配置文件告诉JUnit应该执行哪些测试顺序; 不过我猜它不会那么容易.我在这里有哪些选项,最简单的选项是什么?我也更喜欢只需列出子包,而不是包中的各种类,甚至是类中的测试函数.

我正在使用Java 1.6.0_26(我在这里没有选择)和JUnit 4.11.

blg*_*lgt 14

您可以使用测试套件执行此操作.(你也可以"嵌套"这些)

@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 {}
Run Code Online (Sandbox Code Playgroud)

... 等等.使用"toplevelsuite"作为入口点,测试将按照您定义@SuiteClasses数组的顺序执行.

对于类中的方法,您可以指定它们执行的顺序@FixMethodOrder(正如您在问题中已经提到的那样).

  • 这里的一般想法是,您可以在每个包中放置一个Suite类,其中包括该包中的所有测试.然后,将"父"套件放在父包中,并将其包含在其中.这样您就可以模拟Suite类中的包层次结构. (2认同)
  • 这确实是一个很好的解决方案,但还有一件事。@RunWith 注解只能使用一次。如果您使用特定框架来运行测试用例,则无法应用此解决方案。 (2认同)