JUnit套件不在循环中运行

时间:2013-07-16 15:03:24

标签: java junit4

我在一个AllTests套件下进行了一些测试(假设Test1,Test2),参见代码:

@RunWith(Suite.class)
@SuiteClasses({ Test1.class, Test2.class})
public class AllTests {  
    public static void main(String[] args) {
        for (int i = 0; i < 4; i++) {
            Result result = JUnitCore.runClasses(AllTests.class);
            for (Failure failure : result.getFailures()) {
                System.out.println(failure.toString());
            }
        }
    }

    @BeforeClass
    public static void runBeforeClass() {
        System.out.println("BEFORE:");
    }

    @AfterClass
    public static void runAfterClass() {
        System.out.println("AFTER:");
    }
}

当我将Result result = JUnitCore.runClasses(AllTests.class);置于循环之下时,套件只运行一个序列[Test1,Test2]。

问题:

  1. 如何在循环[[Test1,Test2],[Test1,Test2],.....]中运行AllTest?
  2. 当我运行(1)时,如何才能以这样的顺序将参数传递给Test1?

2 个答案:

答案 0 :(得分:2)

  

套件只运行一个序列[Test1,Test2]。

如果你看看Junit wiki https://github.com/junit-team/junit/wiki/Aggregating-tests-in-suites

  

//该类保持为空,仅用作上述注释的持有者

因此,类中的代码永远不会执行,并且由于代码中的以下行,套件会运行一个序列

  

@SuiteClasses({Test1.class,Test2.class})

在套件中,测试是独立执行的,因此你可以使用for循环一个接一个地执行Test1和Test2。

关于仅将参数传递给Test1 我认为在Junit中不可能。但是如果你想测试Test1的各种输入参数值的方法,你可以使用参数化的构造函数。

答案 1 :(得分:0)

我找到了问题的答案:
1。我刚刚从AllTests类中删除了main函数,并创建了另一个类MasterTest,这是一个JUnit套件套件。

AllTest课程:

@RunWith(Suite.class)
@SuiteClasses({ Test1.class, Test2.class})
public class AllTests {  
   // This class used for suiting the test classes
}

我可以多次在MasterTest中运行AllTests:

  @RunWith(Suite.class)
    @SuiteClasses({ AllTests.class, AllTests.class, AllTests.class})
    public class MasterTest {  
        public static void main(String[] args) {
            Result result = JUnitCore.runClasses(AllTests.class);
                for (Failure failure : result.getFailures()) {
                    System.out.println(failure.toString());                
                }
        }
    }

2。关于参数:参数化测试对我不利,因为如果我给Test1 3参数一个例子,我会得到以下序列:[Test1,Test1, Test1,Test2],所以我创建了一个包含所有参数的单一类,并使用静态计数器为每次调用返回不同的值。