在Junit 4中运行所有测试

时间:2010-02-12 20:53:02

标签: java eclipse junit junit4

我希望能够以编程方式在项目中运行所有测试。我知道Eclipse有一个“Run as JUnit test”配置,它以某种方式抓住项目中的所有测试并运行它们。有没有办法让我以编程方式获取测试列表并运行它们?或者是否有一些很好的方法来构建包含所有测试用例的测试套件,而无需手动列出每个测试用例(全部700多个)?

我在Eclipse中尝试过“New ... - > Test Suite”选项,但这似乎仅适用于JUnit 3,通过从TestCase扩展来识别测试

测试类是JUnit 4,因此它们唯一的区别特征是注释,没有命名约定,没有来自TestCase的子类。

提前致谢!

7 个答案:

答案 0 :(得分:22)

虽然它并没有真正解决您当前的问题,但我发现创建套件套件和套件是非常有用的一般做法,例如:对于像PackageFooSuite等类似的包,并再次将这些套件组合在一个或多个套件中,例如ModuleFooSuite,并有一个顶级套件,如AllTestsSuite。这样就可以很容易地在一步中运行所有测试以及我正在处理的包的子模块测试(并且测试运行得比我总是运行所有测试的速度快):

@RunWith(Suite.class)
@Suite.SuiteClasses({ PackageFooSuite.class, PackageBarSuite.class} )
public final class AllTestsSuite {} // or ModuleFooSuite, and that in AllTests

答案 1 :(得分:15)

其他答案都没有为我做过。我需要运行40k测试,因此不能手动列出每个类。

我用ClasspathSuite做到了。在类路径中运行所有Junit4和Junit3测试用例的测试套件如下:

import org.junit.extensions.cpsuite.ClasspathSuite;
import org.junit.extensions.cpsuite.ClasspathSuite.*;
import org.junit.runner.RunWith;
import org.junit.runner.JUnitCore;
import static org.junit.extensions.cpsuite.SuiteType.*;

@RunWith(ClasspathSuite.class)
@SuiteTypes({ JUNIT38_TEST_CLASSES, TEST_CLASSES })
public class RunAllSuite {
        /* main method not needed, but I use it to run the tests */
        public static void main(String args[]) {
                JUnitCore.runClasses(RunAllSuite.class);
        }
}

我需要从命令行运行它,所以这就是我所做的:

  1. Downloaded cp-1.2.6.jar
  2. 创建前面提到的RunAllSuite
  3. 编译班级javac RunAllSuite.java -cp cpsuite-1.2.6.jar;junit-4.8.1.jar
  4. 在类路径java -cp cpsuite-1.2.6.jar;junit-4.8.1.jar;path/to/runallsuite/folder;target/classes;target/test-classes RunAllSuite
  5. 中使用目标测试运行它

    就是这样。使用上面的RunAllSuite,您可以在代码中的任何位置执行JUnitCore.runClasses(RunAllSuite.class),它在类路径中运行所有测试。还有其他配置选项,在ClasspathSuite主页中进行了解释。

    另请注意,上面给出的类不会打印任何内容。如果需要,你可以

    import org.junit.extensions.cpsuite.ClasspathSuite;
    import org.junit.extensions.cpsuite.ClasspathSuite.*;
    import org.junit.runner.RunWith;
    import org.junit.runner.JUnitCore;
    import org.junit.internal.TextListener;
    import static org.junit.extensions.cpsuite.SuiteType.*;
    
    @RunWith(ClasspathSuite.class)
    @SuiteTypes({ JUNIT38_TEST_CLASSES, TEST_CLASSES })
    public class RunAllSuite {
            public static void main(String args[]) {
                    JUnitCore junit = new JUnitCore();
                    junit.addListener(new TextListener(System.out));
                    junit.run(RunAllSuite.class);
            }
    }
    

答案 2 :(得分:3)

你可以使用surefire plugin在maven中相当容易地做到这一点:我通常从命令行清理/编译/安装我的项目,然后将它们用于eclipse使用(mvn eclipse:clean eclipse:eclipse),你可以定义pom中的测试套件,列出了每次运行mvn install时要集中运行的所有测试。你不是以编程的方式正确地称呼它们,但你可以肯定地称它们为。

答案 3 :(得分:3)

在Eclipse中(我使用4.6.1) - 右键单击​​项目文件夹,选择" Run As",选择" JUnit Test"

它将在该项目中运行所有测试。包装也一样。

答案 4 :(得分:2)

使用Spring的头脑中:

  • 实现一个TypeFilter,该类与使用@Test注释的方法匹配类(不要忘记考虑超类)
  • 在最顶层的测试包上调用类路径扫描
  • 使用扫描结果调用JUnitRunner

有关类路径扫描和自定义类型过滤器的更多信息here

答案 5 :(得分:1)

在“运行配置”对话框中使用Eclipse Indigo(可能还有Helios),您现在可以在选定的项目,包或源文件夹中运行所有测试。

Eclipse的一个很好的参考是文章Java Unit testing with JUnit 4.x in Eclipse

答案 6 :(得分:0)

我还建议使用JUnit Suite注释。关注link for more detail