33

我希望能够以编程方式运行项目中的所有测试。我知道 Eclipse 有一个“作为 JUnit 测试运行”配置,它以某种方式获取项目中的所有测试并运行它们。有什么方法可以让我以编程方式获取测试列表并运行它们?或者有什么好方法可以构建一个包含所有测试用例的测试套件,而无需手动列出每个测试用例(全部 700 多个)?

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

测试类是 JUnit 4,所以它们唯一的区别特征是注释,没有命名约定,没有从 TestCase 继承。

提前致谢!

4

7 回答 7

23

尽管它并不能真正解决您当前的问题,但我发现创建套件和套件套件是一种非常有用的一般做法,例如,对于类似PackageFooSuite等的包,然后将这些套件再次组装到一个或多个套件中,就像ModuleFooSuite并拥有一个顶部级套件,如AllTestsSuite. 这样,就可以轻松地在一个步骤中运行所有测试以及我当前正在处理的包的子模块测试(并且让测试运行得比我总是运行所有测试更快):

@RunWith(Suite.class)
@Suite.SuiteClasses({ PackageFooSuite.class, PackageBarSuite.class} )
public final class AllTestsSuite {} // or ModuleFooSuite, and that in AllTests
于 2010-02-12T21:01:13.410 回答
16

其他答案都没有为我做。我需要运行 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. 下载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

就是这样。使用上面的 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);
        }
}
于 2014-03-23T19:56:41.860 回答
3

您可以在 maven 中使用surefire 插件相当轻松地做到这一点:我通常在比较它们的 Eclipse 使用情况之前从命令行清理/编译/安装我的项目,mvn eclipse:clean eclipse:eclipse并且您可以在您的 pom 中定义一个列出所有测试的测试套件你每次跑步都想集体跑步mvn install。您并没有以编程方式准确地调用它们,但您当然可以整体调用它们。

于 2010-02-12T20:57:18.913 回答
2

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

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

于 2016-10-10T17:21:54.700 回答
1

使用 Spring 在我的头顶:

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

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

于 2010-12-31T13:26:05.303 回答
0

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

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

于 2012-03-07T07:57:58.720 回答
-1

我还建议使用 JUnit Suite 注释。点击链接了解更多详情

于 2011-02-10T01:25:33.743 回答