在Junit 4中运行所有测试

ale*_*loh 31 java eclipse junit junit4

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

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

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

提前致谢!

Fab*_*eeg 23

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

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


eis*_*eis 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);
        }
}
Run Code Online (Sandbox Code Playgroud)

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

  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);
        }
}
Run Code Online (Sandbox Code Playgroud)

  • @Jan即使我们抛开不切实际的地方,班级的大​​小也有其限制(确切地说是64k字符).我不知道所有这些测试名称是如何适合的. (2认同)