使用命令行从 JUnit 类运行单个测试

2022-08-31 09:52:32

我试图找到一种方法,允许我仅使用命令行和java从JUnit类运行单个测试。

我可以使用以下方法从类中运行整组测试:

java -cp .... org.junit.runner.JUnitCore org.package.classname

我真正想做的是这样的:

java -cp .... org.junit.runner.JUnitCore org.package.classname.method

艺术

java -cp .... org.junit.runner.JUnitCore org.package.classname#method

我注意到可能有一些方法可以使用JUnit注释来执行此操作,但我不希望手动修改测试类的源代码(尝试自动执行此操作)。我也确实看到Maven可能有办法做到这一点,但如果可能的话,我想避免依赖Maven。

所以我想知道是否有任何方法可以做到这一点?


我正在寻找的要点:

  • 能够从 JUnit 测试类运行单个测试
  • 命令行(使用 JUnit)
  • 避免修改测试源
  • 避免使用其他工具

答案 1

您可以相当轻松地创建自定义的准系统JUnit运行器。下面将运行以下形式的单个测试方法:com.package.TestClass#methodName

import org.junit.runner.JUnitCore;
import org.junit.runner.Request;
import org.junit.runner.Result;

public class SingleJUnitTestRunner {
    public static void main(String... args) throws ClassNotFoundException {
        String[] classAndMethod = args[0].split("#");
        Request request = Request.method(Class.forName(classAndMethod[0]),
                classAndMethod[1]);

        Result result = new JUnitCore().run(request);
        System.exit(result.wasSuccessful() ? 0 : 1);
    }
}

您可以像这样调用它:

> java -cp path/to/testclasses:path/to/junit-4.8.2.jar SingleJUnitTestRunner 
    com.mycompany.product.MyTest#testB

在快速浏览了 JUnit 源代码之后,我得出了与您相同的结论,即 JUnit 本身不支持此功能。这对我来说从来都不是问题,因为IDE都具有自定义的JUnit集成,允许您在光标下运行测试方法以及其他操作。我从来没有直接从命令行运行JUnit测试;我总是让IDE或构建工具(Ant,Maven)来处理它。特别是因为默认的 CLI 入口点 (JUnitCore) 除了在测试失败时产生非零退出代码外,不会生成任何结果输出。

注意:对于 JUnit 版本 >= 4.9,您需要在类路径中使用 hamcrest


答案 2

我使用Maven来构建我的项目,并使用SureFire maven插件来运行junit测试。如果您进行了此设置,则可以执行以下操作:

mvn -Dtest=GreatTestClass#testMethod test

在此示例中,我们只是在类“GreatTestClass”中运行一个名为“testMethod”的测试方法。

有关更多详细信息,请查看 http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html


推荐