我想从命令行运行JUnit测试用例。 我该怎么做呢?


当前回答

对于JUnit 5。x是:

java -jar junit-platform-console-standalone-<version>.jar <Options>

可以在https://stackoverflow.com/a/52373592/1431016上找到简短的总结,在https://junit.org/junit5/docs/current/user-guide/#running-tests-console-launcher上找到完整的细节

对于JUnit 4。X它真的是:

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]

但是如果您使用的是JUnit 3。X注意类名不同:

java -cp .:/usr/share/java/junit.jar junit.textui.TestRunner [test class name]

您可能需要在类路径中添加更多jar或带有类文件的目录,并用分号(Windows)或冒号(UNIX/Linux)分隔。这取决于你的环境。

编辑:我添加了当前目录作为一个例子。这取决于您的环境以及如何构建应用程序(可以是bin/或build/甚至my_application.jar等)。注意Java 6+确实支持类路径中的glob,你可以这样做:

java -cp lib/*.jar:/usr/share/java/junit.jar ...

编写测试!:-)

其他回答

实际上,你也可以让Junit测试一个可运行的Jar,并调用可运行的Jar为 java jar

@lzap给出的答案是一个很好的解决方案。然而,我想补充的是,你应该补充。到类路径,这样您的当前目录就不会被遗漏,从而导致您自己的类被遗漏。我在某些平台上就遇到过这种情况。所以JUnit 4的更新版本。X是:

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]

如果你的项目是基于maven的,你可以使用下面的命令从属于模块'my-module'的测试类CustomTest中运行所有的测试方法:

mvn clean test -pl :my-module -Dtest=CustomTest

或者使用next命令只从测试类CustomTest中运行一个测试方法myMethod:

mvn clean test -pl :my-module -Dtest=CustomTest#myMethod

为了实现这个功能,你需要Maven Surefire Plugin v.2.7.3+和Junit 4。 更多详情请访问:http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html

在JUnit 4.12中,以下内容不适合我:

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]

显然,从JUnit 4.11开始,你也应该在你的类路径中包含hamcrest-core.jar:

java -cp .:/usr/share/java/junit.jar:/usr/share/java/hamcrest-core.jar org.junit.runner.JUnitCore [test class name]

或者,您可以在JunitCore类http://junit.sourceforge.net/javadoc/org/junit/runner/JUnitCore.html中使用以下方法

运行(与请求,类类和Runner)或runClasses从您的java文件。