JUnit参数在套件中首先运行的所有测试的方法,而不是在每次测试之前

时间:2013-11-30 07:20:34

标签: java unit-testing junit parameterized

基本问题是,当我将JUnit测试分组到套件或套件中时,所有测试的@Parameters方法首先在单个套件或测试执行之前运行。我们的设置如下:

我们有多个测试类文件,每个文件都有静态内部类和实际测试。

@RunWith(Suite.class)
@SuiteClasses({
   SubTestSuite01.TestSet01.class,
   SubTestSuite01.TestSet02.class})
public class SubTestSuite01 {
  public static class TestSet01{
    public TestSet01(){}
    @Parameters public static Collection<Object[]> data(){}
    @Test public void test01(){}
    @Test public void test02(){}
  }

  public static class TestSet02{
    public TestSet02(){}
    @Parameters public static Collection<Object[]> data(){}
    @Test public void test01(){}
    @Test public void test02(){}
  }
} 

以及SubTestSuite02SubTestSuite03等等。现在,为了将所有这些测试套件收集到更大的集合中,我创建了一个更大的测试套件,如下所示:

@RunWith(Suite.class)
@SuiteClasses({SubTestSuite01.class, SubTestSuite02.class,SubTestSuite03.class})
public class AllTests{}

但是,无论我是运行AllTests主套件还是SubTestSuite,我都会在整个套件中首先调用所有内部类的@Parameters方法/任何@BeforeClass方法或实际测试方法之前的套件。

我的问题是:

  1. 这是预期的行为吗?

  2. 如何让它运行,以便各个内部类的@Parameters方法在它自己的测试执行之前运行,而不是在套件的开头一起运行?

  3. 根据当前的行为,我冒着快速压倒我的系统资源的风险,因为各种各样的东西都被加载在一起。

1 个答案:

答案 0 :(得分:0)

@Parameterized 将始终首先运行,甚至在 @BeforeClass

之前

您不必为测试使用静态类和内部类,我会使用类来进行类似的测试,并使用@Cetegories来选择组