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

Unit testing 如何从命令行运行JUnit测试用例,unit-testing,command-line,junit,Unit Testing,Command Line,Junit,我想从命令行运行JUnit测试用例。 如何执行此操作?确保JUnit.jar位于类路径中,然后从控制台调用命令行运行程序 java org.junit.runner.JUnitCore[测试类名] 参考资料:对于JUnit 5.x,它是: java -jar junit-platform-console-standalone-<version>.jar <Options> 但是如果您使用的是JUnit 3.X,请注意类名不同: java -cp .:/usr/share

我想从命令行运行JUnit测试用例。
如何执行此操作?

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

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


参考资料:

对于JUnit 5.x,它是:

java -jar junit-platform-console-standalone-<version>.jar <Options>
但是如果您使用的是JUnit 3.X,请注意类名不同:

java -cp .:/usr/share/java/junit.jar junit.textui.TestRunner [test class name]
您可能需要在类路径中添加更多JAR或目录以及类文件,并使用分号(Windows)或冒号(UNIX/Linux)分隔这些JAR或目录。这取决于你的环境

编辑:我添加了当前目录作为示例。取决于您的环境和构建应用程序的方式(可以是bin/或build/甚至my_application.jar等)。注意Java 6+确实支持类路径中的globs,您可以执行以下操作:

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

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

@lzap给出的答案是一个很好的解决方案。不过,我想补充一点,你应该补充一点。到类路径,以便不遗漏当前目录,从而遗漏您自己的类。这在一些平台上发生在我身上。因此JUnit 4.x的更新版本为:

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

就我个人而言,我会使用Maven surefire JUnit runner来实现这一点

实际上,您还可以将Junit测试设置为可运行Jar,并将可运行Jar作为 java-jar在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测试的门面,该门面包含在junit的4+版本中。

如果您的项目基于Maven,您可以使用下一个命令从属于模块“我的模块”的测试类CustomTest运行所有测试方法:

mvn clean test -pl :my-module -Dtest=CustomTest
mvn clean test -pl :my-module -Dtest=CustomTest#myMethod
或者使用next命令仅从测试类CustomTest运行1个测试方法myMethod:

mvn clean test -pl :my-module -Dtest=CustomTest
mvn clean test -pl :my-module -Dtest=CustomTest#myMethod
要实现此功能,您需要Maven Surefire插件v.2.7.3+和Junit 4。
更多细节在这里:

或者,您可以在JunitCore类中使用以下方法


运行(使用请求、类类和运行程序)或从java文件运行类。

使用JUnit 4.12,以下内容对我不起作用:

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]
,从JUnit4.11开始,您还应该在类路径中包含
hamcrest core.jar

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

Maven路

如果使用Maven,可以运行以下命令来运行所有测试用例:

mvn clean test
gradle test
或者,您可以按如下所示运行特定测试

mvn clean test -Dtest=your.package.TestClassName
mvn clean test -Dtest=your.package.TestClassName#particularMethod
gradle test --tests your.package.TestClassName
gradle test --tests your.package.TestClassName.particularMethod
如果希望在控制台中查看堆栈跟踪(如果有),而不是在target\surefire reports文件夹中查看报告文件,请将用户属性surefire.useFile设置为false。例如:

mvn clean test -Dtest=your.package.TestClassName -Dsurefire.useFile=false
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
渐变方式

如果使用Gradle,则可以运行以下命令来运行所有测试用例:

mvn clean test
gradle test
或者,您可以按如下所示运行特定测试

mvn clean test -Dtest=your.package.TestClassName
mvn clean test -Dtest=your.package.TestClassName#particularMethod
gradle test --tests your.package.TestClassName
gradle test --tests your.package.TestClassName.particularMethod

如果您想要更多的信息,您可以考虑诸如STACTr踪迹、或-Ifor或-Debug等选项。p> 例如,当您使用info日志记录级别--info运行Gradle时,它将在运行时向您显示每个测试的结果。如果有任何异常,它将向您显示堆栈跟踪,指出问题所在

gradle test --info
如果您想查看整体测试结果,可以在浏览器中打开报告,例如(在Ubuntu中使用Google Chrome打开报告):

蚂蚁路

设置Ant构建文件build.xml后,可以从命令行运行JUnit测试用例,如下所示:

ant -f build.xml <Your JUnit test target name>
然后运行测试用例。例如:

mvn clean test -Dtest=your.package.TestClassName -Dsurefire.useFile=false
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
  • 创建新的JUnit测试文件。例如“Backup.java”
  • 从损坏的文件粘贴到新文件内容
  • “作为JUnit测试运行”新文件
  • 在此之后,旧文件也开始工作
  • 您可以删除“Backup.java”

  • 您还需要设置项目的其余类路径。即使[test class name]在类路径中,也只会给出“找不到类:[测试类名]”。这应该是分号吗?@panny在Windows上是分号。在n*nix环境(至少OSX和我使用过的所有Linux发行版)中,您使用冒号。@rand_acs测试类名是否需要是完全分类的类名?@Goaler444是的,我总是使用全名,在指定所有名称空间的情况下。@我想您是否有任何想法可以通过编程确定测试是使用JUnit4还是JUnit3?Class.forName。我最后一次用Java编程已经有好几年了……如果您使用的是android呢?“-cp”参数(即类路径)的文档是and和and。显然,现在支持类路径中的通配符。Downvote。对于JUnit4.x来说,这是不对的。您的说明给出了“找不到类:[测试类名]”,即使[test class name]在类路径中。请非常简短地解释您的答案。我没有要求您保持答案简短。我要求补充一些解释(至少是一个简短的解释)。解释你的答案是如何工作的是一个很好的实践。读者可能会理解它,喜欢它,所以如果我有一个补充的测试jar和香草junit jar,我必须在java-cp命令中同时使用这两个jar才能真正工作?有没有办法把所有这些都放到命令行中,这样我就不必输入那么多东西了?类似的安卓junit问题:安卓文档:(来自命令行)。(andreea.sandu)JUnit 5的答案