我在一个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]。
答案 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],所以我创建了一个包含所有参数的单一类,并使用静态计数器为每次调用返回不同的值。