如何在代码中运行整个JUnit测试套件

4

在Eclipse中,使用JUnit 4,您可以右键单击一个项目或包,然后选择“以JUnit测试运行”,它将运行该组内的所有JUnit测试。是否有一种方法可以从代码内部执行同样的操作?

3个回答

8

您可以使用JUnit中的包,例如JUnitCore,像这样:

public static void main(String[] args){
    List tests = new ArrayList();
    tests.add(TestOne.class);
    tests.add(TestTwo.class);

    for (Class test : tests){
        runTests(test);
    }
}

private static void runTests(Class test){
    Result result = JUnitCore.runClasses(test);
    for (Failure failure : result.getFailures()){
        System.out.println(failure.toString());
    }
}

6

使用JUnit Suite:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
// Put your Test Case Class here
@Suite.SuiteClasses({
    JunitTest1.class,
    JunitTest2.class,
    JunitTest3.class
})
public class JunitTestSuite {}

然后创建一个主方法来运行它。
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class JunitTestSuiteRunner {

public static void main(String[] args) {

    Result result = JUnitCore.runClasses(JunitTestSuite.class);
    for (Failure fail : result.getFailures()) {
        System.out.println(fail.toString());
    }
    if (result.wasSuccessful()) {
        System.out.println("All tests finished successfully...");
    }
}}

1
JUnit提供了测试套件test Suite。试试看吧。
[...]
public class TestCaseA {
    @Test
    public void testA1() {
        // omitted
    }
}

[...]
public class TestCaseB {
    @Test
    public void testB1() {
        // omitted
  }
}

[...]
@RunWith(value=Suite.class)
@SuiteClasses(value = {TestCaseA.class})
public class TestSuiteA {
}

[...]
@RunWith(value=Suite.class)
@SuiteClasses(value = {TestCaseB.class})
public class TestSuiteB {
}

[...]
@RunWith(value = Suite.class )
@SuiteClasses(value = {TestSuiteA.class, TestSuiteB.class})
public class MasterTestSuite{
}

我的许多测试都有相同的名称,因此这个选项不太适用。我真正需要的是具有与单击项目或包中的“运行为JUnit测试”相同功能的代码。 - meanderingmoose
这种方法要求您提及所有类。 - Thorbjørn Ravn Andersen

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