如何从命令行运行JUnittesting用例

我想从命令行运行JUnittesting用例。 我该怎么做?

对于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或目录与您的类文件一起添加到类path中,并使用分号(Windows)或冒号(UNIX / Linux)进行分隔。 这取决于你的环境。

编辑:我已经添加了当前目录作为例子。 取决于你的环境以及你如何构build你的应用程序(可以是bin /或者build /甚至是my_application.jar等等)。 注意Java 6+在classpath中支持全局,你可以这样做:

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

希望它有帮助。 写testing! 🙂

@lzap给出的答案是一个很好的解决scheme。 不过,我想补充一点,你应该加上。 到类path,以便您的当前目录不会被遗漏,导致您自己的类被排除在外。 这在一些平台上发生在我身上。 所以JUnit 4.x的更新版本是:

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

Maven的方式

如果您使用Maven,则可以运行以下命令来运行所有testing用例:

 mvn clean test 

或者你可以运行一个特定的testing如下

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

如果希望在控制台中看到堆栈跟踪(如果有)而不是目标\ surefire-reports文件夹中的报告文件,请将用户属性surefire.useFile设置为false。 例如:

 mvn clean test -Dtest=your.package.TestClassName -Dsurefire.useFile=false 

Gradle的方式

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

 gradle test 

或者你可以运行一个特定的testing如下

 gradle test --tests your.package.TestClassName gradle test --tests your.package.TestClassName.particularMethod 

如果您想了解更多信息,可以考虑诸如–stacktrace,–info或者–debug之类的选项。

例如,当您使用信息日志logging级别–info运行Gradle时,它会显示每个testing运行时的结果。 如果有任何exception,它会显示堆栈跟踪,指出问题是什么。

 gradle test --info 

如果您想查看整体testing结果,则可以在浏览器中打开报告(例如,使用Ubuntu中的Google Chrome打开它):

 google-chrome build/reports/tests/index.html 

ant的方式

一旦设置了Ant构build文件build.xml,就可以从命令行运行JUnittesting用例,如下所示:

 ant -f build.xml <Your JUnit test target name> 

您可以按照下面的链接阅读更多关于如何在Ant构build文件中configurationJUnittesting: https : //ant.apache.org/manual/Tasks/junit.html

正常的方式

如果你不使用Maven,Gradle或者Ant,你可以按照下面的方法:

首先,你需要编译你的testing用例。 例如(在Linux中):

 javac -d /absolute/path/for/compiled/classes -cp /absolute/path/to/junit-4.12.jar /absolute/path/to/TestClassName.java 

然后运行你的testing用例。 例如:

 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.jar在您的类path中,然后从控制台调用命令行运行程序

java org.junit.runner.JUnitCore [testing类名]

参考: junit常见问题

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

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

显然 ,从JUnit 4.11开始,你还应该在你的classpath中包含hamcrest-core.jar

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

在Windows中

java -cp .;/path/junit.jar org.junit.runner.JUnitCore TestClass [不带.class扩展名的testing类名]

例如: c:\>java -cp .;f:/libraries/junit-4.8.2 org.junit.runner.JUnitCore TestSample1 TestSample2 ...等等,如果有多个testing类的话。

-cp代表类path,点(。)代performance有的类path,而冒号(;)将附加给定jar添加到类path中,如上面的例子所示,junit-4.8.2现在可以在类path中用来执行JUnitCore类这里我们已经习惯了执行我们的testing课程。

上面的命令行语句可以帮助您从命令提示符(即MSDos)执行junit(版本4+)testing。

注:JUnitCore是一个执行junittesting的外观,这个外观包含在junit的4个以上版本中。

实际上,你也可以使Junittesting成为一个可运行的Jar,并将可运行的JAR调用为java -jar

我个人会使用Maven surefire JUnit亚军来做到这一点。

如果您的项目是基于Maven的,则可以使用下一个命令运行属于模块“my-module”的testing类CustomTest中的所有testing方法:

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

或者使用下一个命令从test-class CustomTest中仅运行1个testing方法myMethod:

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

对于这种能力,您需要Maven Surefire插件v.2.7.3 +和Junit 4.更多细节在这里: http ://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html

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

运行(使用Request,Class类和Runner)或从java文件运行类。

如果你的项目是基于ant的,那么你应该可以在控制台上做这样的事情:

 ant test 

如果这不起作用,但是您的项目仍然是基于ant的,您可以运行ant -p来列出项目的主要目标。