我想从命令行运行 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 ...
希望能帮助到你。写测试! :-)
Maven方式
如果您使用 Maven,则可以运行以下命令来运行所有测试用例:
mvn clean test
或者您可以运行如下特定测试
mvn clean test -Dtest=your.package.TestClassName
mvn clean test -Dtest=your.package.TestClassName#particularMethod
如果您想在控制台中查看堆栈跟踪(如果有)而不是在 target\surefire-reports 文件夹中查看报告文件,请将用户属性 surefire.useFile 设置为 false。例如:
mvn clean test -Dtest=your.package.TestClassName -Dsurefire.useFile=false
摇篮方式
如果您使用 Gradle,则可以运行以下命令来运行所有测试用例:
gradle test
或者您可以运行如下特定测试
gradle test --tests your.package.TestClassName
gradle test --tests your.package.TestClassName.particularMethod
如果您想了解更多信息,可以考虑使用--stacktrace、--info 或--debug 等选项。
例如,当您使用 info 日志记录级别 --info 运行 Gradle 时,它将在每个测试运行时向您显示结果。如果有任何异常,它会显示堆栈跟踪,指出问题所在。
gradle test --info
如果您想查看整体测试结果,可以在浏览器中打开报告,例如(在 Ubuntu 中使用 Google Chrome 打开):
google-chrome build/reports/tests/index.html
蚂蚁方式
设置好 Ant 构建文件 build.xml 后,您可以从命令行运行 JUnit 测试用例,如下所示:
ant -f build.xml <Your JUnit test target name>
您可以点击以下链接,详细了解如何在 Ant 构建文件中配置 JUnit 测试:https://ant.apache.org/manual/Tasks/junit.html
正常方式
如果你不使用 Maven,或者 Gradle 或 Ant,你可以按照以下方式:
首先,您需要编译您的测试用例。例如(在 Linux 中):
javac -d /absolute/path/for/compiled/classes -cp /absolute/path/to/junit-4.12.jar /absolute/path/to/TestClassName.java
然后运行你的测试用例。例如:
java -cp /absolute/path/for/compiled/classes:/absolute/path/to/junit-4.12.jar:/absolute/path/to/hamcrest-core-1.3.jar org.junit.runner.JUnitCore your.package.TestClassName
@lzap 给出的答案是一个很好的解决方案。但是,我想补充一点,您应该添加 .到类路径,这样你的当前目录就不会被遗漏,导致你自己的类被遗漏。这在某些平台上发生在我身上。因此,JUnit 4.x 的更新版本将是:
java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]
确保 JUnit.jar 在您的类路径中,然后从控制台调用命令行运行程序
java org.junit.runner.JUnitCore [测试类名]
参考:junit FAQ
对于 JUnit 4.12,以下内容对我不起作用:
java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]
Apparently,从 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]
java -cp .:/usr/share/java/junit4.jar org.junit.runner.JUnitCore [test class name]
在 Windows 中是
java -cp .;/path/junit.jar org.junit.runner.JUnitCore TestClass
[不带 .class 扩展名的测试类名]
例如:c:\>java -cp .;f:/libraries/junit-4.8.2 org.junit.runner.JUnitCore TestSample1 TestSample2 ...
等等,如果一个有多个测试类。
-cp 代表类路径,点 (.) 代表现有的类路径,而分号 (;) 将附加的给定 jar 附加到类路径中,如上面的示例 junit-4.8.2 现在在类路径中可用于执行 JUnitCore 类这里我们用来执行我们的测试类。
上面的命令行语句帮助您从命令提示符(即 MSDos)执行 junit(版本 4+)测试。
注意:JUnitCore 是一个执行 junit 测试的门面,这个门面包含在 4+ 版本的 junit 中。
实际上你也可以让 Junit 测试一个可运行的 Jar 并将可运行的 jar 称为 java -jar
如果您的项目是基于 Maven 的,您可以使用下一个命令从属于模块“my-module”的测试类 CustomTest 运行所有测试方法:
mvn clean test -pl :my-module -Dtest=CustomTest
或者使用下一个命令从测试类 CustomTest 只运行 1 个测试方法 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
就我个人而言,我会使用 Maven surefire JUnit runner 来做到这一点。
或者,您可以在 JunitCore 类 http://junit.sourceforge.net/javadoc/org/junit/runner/JUnitCore.html 中使用以下方法
从您的 java 文件中运行(使用 Request 、 Class 类和 Runner )或 runClasses 。
不定期副业成功案例分享