如何从命令行运行 JUnit 测试用例
Posted
技术标签:
【中文标题】如何从命令行运行 JUnit 测试用例【英文标题】:How to run JUnit test cases from the command line 【发布时间】:2011-01-15 04:05:15 【问题描述】:我想从命令行运行 JUnit 测试用例。 我该怎么做?
【问题讨论】:
类似的androidjunit问题:***.com/q/11144466/611007 android 文档:running tests on a device or emulator(来自命令行)。 (viaandreea.sandu) ***.com/a/52373592/1431016JUnit 5 的答案javac -cp "junit-4.12.jar; hamcrest-core-1.3.jar;." Tests.java
为我工作。注意结束点 - 这很重要!
【参考方案1】:
对于 JUnit 5.x,它是:
java -jar junit-platform-console-standalone-<version>.jar <Options>
在https://***.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,这是不对的。你的指令给出“找不到类:[测试类名称]”即使 [测试类名称] 在类路径中。【参考方案2】: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 运行 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
【讨论】:
使用最后一种方法的 groovy 测试怎么样? 使用 clean 有什么特别的原因吗? @capa_matrix 在新构建之前,maven 应该清理上一次运行生成的所有东西。例如类、jars、wsdl-s 自动生成的类(如果正在使用)等等。【参考方案3】:我个人会使用 Maven surefire JUnit runner 来做到这一点。
【讨论】:
【参考方案4】:对于 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]
【参考方案5】:
您也可以在 JunitCore 类 http://junit.sourceforge.net/javadoc/org/junit/runner/JUnitCore.html 中使用以下方法
从您的 java 文件中运行(使用 Request、Class 类和 Runner)或 runClasses。
【讨论】:
【参考方案6】:如果您的项目是基于 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
【讨论】:
【参考方案7】:在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 命令中同时拥有这两个才能真正起作用?有没有办法将所有这些都放到命令行中,这样我就不必输入那么多东西了?【参考方案8】:其实你也可以让 Junit 测试一个可运行的 Jar 并将可运行的 jar 称为 java -jar
【讨论】:
在 Eclipse 中,右键单击您的 JUnit 项目 -> 单击导出 -> 选择 Java-> 可运行的 Jar 文件【参考方案9】:@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 是的,我总是使用全名,并指定所有命名空间。【参考方案10】:确保 JUnit.jar 在您的类路径中,然后从控制台调用命令行运行程序
java org.junit.runner.JUnitCore [测试类名]
参考:junit FAQ
【讨论】:
您还需要设置项目的其余类路径。 这只是给出“找不到类:[测试类名称]”,即使 [测试类名称] 在类路径中。以上是关于如何从命令行运行 JUnit 测试用例的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法使用CLI(命令行界面)使用junit测试用例测试我的项目的jar文件?
如何将循环运行的测试用例添加到通过 SOAPUI 生成的 Junit 报告中