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

问题描述 投票:0回答:5

我正在尝试找到一种方法,允许我仅使用命令行和 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)
  • 避免修改测试源
  • 避免使用额外的工具
java unit-testing command-line junit
5个回答
87
投票

您可以相当轻松地创建自定义的准系统 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


74
投票

我使用 Maven 构建我的项目,并使用 SureFire maven 插件运行 junit 测试。 如果你有这个设置,那么你可以这样做:

mvn -Dtest=GreatTestClass#testMethod test

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

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


1
投票

以下命令可以正常工作。

mvn -Dtest=SqsConsumerTest -DfailIfNoTests=false test

0
投票

我们使用了 IntelliJ,也花了相当多的时间试图弄清楚它。

基本上,它涉及2个步骤:

第一步:编译测试类

% javac -cp .:"/Applications/IntelliJ IDEA 13 CE.app/Contents/lib/*" SetTest.java

第 2 步:运行测试

% java -cp .:"/Applications/IntelliJ IDEA 13 CE.app/Contents/lib/*" org.junit.runner.JUnitCore SetTest


0
投票

对于任何想要在 JUnit5 中执行此操作的人!

JUnit5 包含一个 fat jar,用于 在命令行上运行测试

您可以从 Maven Central 手动下载 jar:https://central.sonatype.com/artifact/org.junit.platform/junit-platform-console-standalone

或者你可以让

mvn
得到它:

mvn dependency:get -Dartifact=org.junit.platform:junit-platform-console-standalone:1.11.3

# copy the jar to this dir for convenience
mvn dependency:copy  -Dartifact=org.junit.platform:junit-platform-console-standalone:1.11.3 -DoutputDirectory=.

现在,您可以像这样运行 jar:

java -jar junit-platform-console-standalone-1.11.3.jar execute --help

最后,要运行测试,您需要提供选择选项之一(请参阅上述命令打印的帮助菜单),例如要选择名为

hello.HelloTest
的类,请使用以下命令:

java -jar junit-platform-console-standalone-1.11.3.jar execute -cp <classpath-for-the-class-under-test> --select-class=hello.HelloTest

如果您想选择一种方法,例如

hi

java -jar junit-platform-console-standalone-1.11.3.jar execute -cp <classpath-for-the-class-under-test> --select=method:hello.HelloTest#hi
© www.soinside.com 2019 - 2024. All rights reserved.