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

标签 java unit-testing command-line junit

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

我可以使用以下方法从类(class)运行整套测试:

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)
  • 避免修改测试源
  • 避免使用其他工具

最佳答案

您可以相当轻松地制作自定义的准系统 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类路径中的库

关于java - 使用命令行从 JUnit 类运行单个测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9288107/

相关文章:

java - 使用 itext 在 pdf 中打印 xml

java - 如何从 Java 启动 msconfig.exe?

java - 如何添加自定义 Java 命令行选项?

node.js - 如何从 node.js 写入 System.in?

java - 编写 jBehave 示例步骤

java - 如何清除 Aeron 过期的存档和快照文件?

java - 为什么这个使用类型推断的 java 8 示例没有在 Eclipse 中编译?

python - Python doctest 是否不需要单元测试?

mysql - Django 单元测试全文搜索

java - 我可以在 Maven 构建中使用 PostgreSQL 吗?