1

我在一个套件 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?
4

2 回答 2

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 的各种输入参数值的方法,可能你可以使用参数化构造函数。

于 2013-07-18T13:27:14.687 回答
0

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

所有测试类:

@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个参数例如运行AllTests,我得到以下序列:[Test1,Test1,Test1,Test2],所以我创建了一个单音包含所有参数并使用静态计数器为每个调用返回不同值的类。

于 2013-07-20T17:59:03.610 回答