按指定顺序运行JUnit4测试类

10

我已经写了许多测试,不仅分成不同的类别,而且根据它们所测试的应用程序领域,分成不同的子包。因此,我的包结构看起来像这样:

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

my.package.tests包中,我有一个父类,所有子包中的测试都会扩展它。现在,我想选择测试运行的顺序;不是在类内部(这似乎可以使用FixMethodOrder注释),而是类或子包本身的顺序(所以首先是子包one中的测试,然后是two中的测试等等)。一些测试类使用Parameterized runner,以防万一这会有所不同。选择顺序对测试成功并不是必需的,它们彼此独立;然而,为了反映程序各个部分通常使用的顺序,将它们排序是有帮助的,因为这样可以使分析变得更容易。

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

我正在使用Java 1.6.0_26(我没有选择),以及JUnit 4.11。

1个回答

18

你可以使用测试套件来完成这个操作。(你还可以将这些测试套件“嵌套”在一起)

@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指定它们执行的顺序(就像您已经在问题中提到的那样)。


谢谢,它像魔法一样有效!不过,我猜没有选项可以告诉它“运行以下包中的所有测试”,对吧? - blalasaadri
不,你不能自动告诉它包中包含所有类(据我所知,至少目前还不能)。 - blgt
2
这里的一般思路是,您可以在每个包中放置一个Suite类,其中包括该包中的所有测试。然后将您的“父”套件放置在父包中并将其包含在其中。这样,您就可以在Suite类中模仿包层次结构。 - blgt
是的,我已经完成了。肯定比之前好多了。 :-) - blalasaadri
2
这确实是一个很好的解决方案,但还有一件事。您只能使用一次@RunWith注释。如果您使用特定的框架来运行测试用例,则无法应用此解决方案。 - testtamas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接