Run single test from a JUnit class using command-line Run single test from a JUnit class using command-line java java

Run single test from a JUnit class using command-line


You can make a custom, barebones JUnit runner fairly easily. Here's one that will run a single test method in the form com.package.TestClass#methodName:

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);    }}

You can invoke it like this:

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

After a quick look in the JUnit source I came to the same conclusion as you that JUnit does not support this natively. This has never been a problem for me since IDEs all have custom JUnit integrations that allow you to run the test method under the cursor, among other actions. I have never run JUnit tests from the command line directly; I have always let either the IDE or build tool (Ant, Maven) take care of it. Especially since the default CLI entry point (JUnitCore) doesn't produce any result output other than a non-zero exit code on test failure(s).

NOTE:for JUnit version >= 4.9 you need hamcrest library in classpath


I use Maven to build my project, and use SureFire maven plugin to run junit tests.Provided you have this setup, then you could do:

mvn -Dtest=GreatTestClass#testMethod test

In this example, we just run a test method named "testMethod" within Class "GreatTestClass".

For more details, check out http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html


The following command works fine.

mvn -Dtest=SqsConsumerTest -DfailIfNoTests=false test