使用命令行从JUnit类运行单个testing

我正试图find一种方法,使我能够使用命令行和java从JUnit类运行单个testing。

我可以使用下面的命令来运行整套的testing:

java -cp .... org.junit.runner.JUnitCore org.package.classname 

我真正想做的是这样的:

 java -cp .... org.junit.runner.JUnitCore org.package.classname.method 

要么:

 java -cp .... org.junit.runner.JUnitCore org.package.classname#method 

我注意到可能有方法使用JUnit注释来做到这一点,但我宁愿不要手动修改我的testing类的来源(试图自动执行此操作)。 我也看到,Maven可能有办法做到这一点,但如果可能的话,我想避免取决于Maven。

所以我想知道是否有办法做到这一点?


我正在寻找的关键点:

  • 能够从JUnittesting类运行单个testing
  • 命令行(使用JUnit)
  • 避免修改testing源
  • 避免使用其他工具

您可以轻松地制作一个自定义的准系统JUnit亚军。 下面是一个以com.package.TestClass#methodName的forms运行单个testing方法的方法:

 import org.junit.runner.JUnitCore; import org.junit.runner.Request; import org.junit.runner.Result; public class SingleJUnitTestRunner { public static void main(String... args) throws ClassNotFoundException { String[] classAndMethod = args[0].split("#"); Request request = Request.method(Class.forName(classAndMethod[0]), classAndMethod[1]); Result result = new JUnitCore().run(request); System.exit(result.wasSuccessful() ? 0 : 1); } } 

你可以像这样调用它:

 > java -cp path/to/testclasses:path/to/junit-4.8.2.jar SingleJUnitTestRunner com.mycompany.product.MyTest#testB 

在快速浏览JUnit源代码之后,我得出了与您相同的结论,即JUnit本身不支持这一点。 这对我来说从来都不是问题,因为IDE都具有定制的JUnit集成,允许您在光标下运行testing方法以及其他操作。 我从来没有直接从命令行运行JUnittesting; 我总是让IDE或者构build工具(Ant,Maven)来照顾它。 特别是由于缺省的CLI入口点(JUnitCore)在testing失败时不会产生非零结果输出。

注意:对于JUnit版本> = 4.9,您需要在classpath中使用hamcrest库

我使用Maven构build我的项目,并使用SureFire maven插件来运行junittesting。 假如你有这个设置,那么你可以这样做:

 mvn -Dtest=GreatTestClass#testMethod test 

在这个例子中,我们只在类“GreatTestClass”中运行名为“testMethod”的testing方法。

有关更多详细信息,请查看http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html

我们使用IntelliJ,花了不less时间试图弄清楚。

基本上涉及2个步骤:

第1步:编译testing类

% javac -cp .:"/Applications/IntelliJ IDEA 13 CE.app/Contents/lib/*" SetTest.java

第2步:运行testing

% java -cp .:"/Applications/IntelliJ IDEA 13 CE.app/Contents/lib/*" org.junit.runner.JUnitCore SetTest