在 Junit 4 中运行所有测试
题
我希望能够以编程方式运行项目中的所有测试。我知道 Eclipse 有一个“作为 JUnit 测试运行”配置,它以某种方式获取项目中的所有测试并运行它们。有什么方法可以让我以编程方式获取测试列表并运行它们?或者是否有一些好方法来构建包含所有测试用例的测试套件,而无需手动列出其中的每一个(全部 700 多个)?
我尝试过“新...-> Eclipse 中的“测试套件”选项,但这似乎仅适用于 JUnit 3,通过从 TestCase 扩展来识别测试
测试类是 JUnit 4,因此它们唯一的区别特征是注释、没有命名约定、没有 TestCase 的子类化。
提前致谢!
解决方案
虽然它并没有真正解决您的眼前的问题,我觉得这是一个非常有用的一般做法是创建套房和套房的套房,例如一包类似PackageFooSuite
等,并在一个或多个套房,再组装这些套件,像ModuleFooSuite
并有一个顶级套房,像AllTestsSuite
。它的简单的方法来同时运行在一个步骤以及为封装子模块测试的所有测试我目前工作(并有测试运行比,如果我总是运行所有的人都更快):
@RunWith(Suite.class)
@Suite.SuiteClasses({ PackageFooSuite.class, PackageBarSuite.class} )
public final class AllTestsSuite {} // or ModuleFooSuite, and that in AllTests
其他提示
其他答案都没有为我做到这一点。我需要运行 40k 个测试,因此手动列出每个类并不是一个选择。
我用它做了 类路径套件. 。运行类路径中所有 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);
}
}
我需要从命令行运行它,所以这就是我所做的:
- 下载cp-1.2.6.jar
- 创建前面提到的RunAllSuite
- 编译类,
javac RunAllSuite.java -cp cpsuite-1.2.6.jar;junit-4.8.1.jar
- 使用类路径中的目标测试运行它,
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);
}
}
在 Eclipse 中(我使用的是 4.6.1) - 右键单击项目文件夹,选择“Run As”,选择“JUnit Test”
它将运行该项目中的所有测试。对于一个包来说也是如此。
我的头顶使用Spring:
- 实现一个 TypeFilter,将类与用 @Test 注释的方法相匹配(不要忘记考虑超类)
- 对最顶层的测试包调用类路径扫描
- 使用扫描结果调用 JUnitRunner
有关类路径扫描和自定义类型过滤器的更多信息 这里
通过在运行配置对话框的Eclipse靛蓝(可能太阳神以及),你现在必须运行在选定的项目,包装或源文件夹的所有测试的能力。
另外,从Eclipse的一个很好的参考是文章中 Java单元测试用JUnit 4.x的蚀。
我也建议使用JUnit套件注释。按照链接,更详细。