ChatGPT解决这个技术问题 Extra ChatGPT

如何从命令行运行 JUnit 测试用例

我想从命令行运行 JUnit 测试用例。我怎样才能做到这一点?

类似 android junit 问题:stackoverflow.com/q/11144466/611007
android 文档:running tests on a device or emulator(来自命令行)。 (via andreea.sandu)

S
Sormuras

对于 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 ...

希望能帮助到你。写测试! :-)


@Izap任何想法以编程方式确定测试是使用JUnit4还是JUnit3?
Class.forName 我猜。多年来我最后一次用 Java 编程......
如果你使用的是安卓呢?
“-cp”参数(即 CLASSPATH)的文档是 here (Java 7, Unix)here (Tutorial) 以及 here (Java 8, Unix)here (Java 8, Windows)。显然现在支持类路径中的通配符。
否决票。对于 JUnit 4.x,这是不对的。您的指令给出“找不到类:[测试类名称]”,即使 [测试类名称] 在类路径中也是如此。
Y
Yuci

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

使用最后一种方法的常规测试怎么样?
使用 clean 有什么特别的原因吗?
@capa_matrix 在新构建之前,maven 应该清理上一次运行生成的所有东西。例如类、jar、wsdl-s 自动生成的类(如果正在使用)等等。
r
rand_acs

@lzap 给出的答案是一个很好的解决方案。但是,我想补充一点,您应该添加 .到类路径,这样你的当前目录就不会被遗漏,导致你自己的类被遗漏。这在某些平台上发生在我身上。因此,JUnit 4.x 的更新版本将是:

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

那应该是半冒号吗?
@panny 它是 Windows 上的分号。在 n *nix 环境(至少 OSX 和我使用过的所有 Linux 发行版)上,您使用冒号。
@rand_acs 测试类名是否需要是完全分类的类名?
@Goaler444 是的,我总是使用全名,并指定所有命名空间。
G
Gishu

确保 JUnit.jar 在您的类路径中,然后从控制台调用命令行运行程序

java org.junit.runner.JUnitCore [测试类名]

参考:junit FAQ


您还需要设置项目的其余类路径。
这只是给出“找不到类:[测试类名称]”,即使 [测试类名称] 在类路径中也是如此。
S
Stefan van den Akker

对于 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]

JUnit 4.12 也有同样的问题。想出了一个类似的解决方案,但它对我不起作用,无法加载 JUnitCore。我基本上切换到 JUnit 4.8.2,因为它不需要在类路径中包含 hamcrest-core.jar。
确认这必须使用 JUnit 4.12 完成。 +1。
这对我有用:java -cp .:/usr/share/java/junit4.jar org.junit.runner.JUnitCore [test class name]
r
rogue lad

在 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 中。


请简短地解释你的答案。
我没有要求你保持简短的回答。我要求添加一些解释(至少是简短的解释)。解释您的答案如何工作是一个很好的做法。读者可以理解,喜欢,点赞。
因此,如果我有一个补充测试 jar 和 vanilla junit jar,我必须在 java -cp 命令中同时拥有这两个才能真正起作用?有没有办法将所有这些都放到命令行中,这样我就不必输入那么多东西了?
I
Indraneel

实际上你也可以让 Junit 测试一个可运行的 Jar 并将可运行的 jar 称为 java -jar


在 Eclipse 中,右键单击您的 JUnit 项目 -> 单击导出 -> 选择 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


d
djangofan

就我个人而言,我会使用 Maven surefire JUnit runner 来做到这一点。


R
Raghu K Nair

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

从您的 java 文件中运行(使用 Request 、 Class 类和 Runner )或 runClasses 。