Run single test from a JUnit class using command-line
Andrew Henderson
I am trying to find an approach that will allow me to run a single test from a JUnit class using only command-line and java.
I can run the whole set of tests from the class using the following:
java -cp .... org.junit.runner.JUnitCore org.package.classnameWhat I really want to do is something like this:
java -cp .... org.junit.runner.JUnitCore org.package.classname.methodor:
java -cp .... org.junit.runner.JUnitCore org.package.classname#methodI noticed that there might be ways to do this using JUnit annotations, but I would prefer to not modify the source of my test classes by hand (attempting to automate this). I did also see that Maven might have a way to do this, but if possible I would like to avoid depending on Maven.
So I am wondering if there is any way to do this?
Key points I'm looking for:
- Ability to run a single test from a JUnit test class
- Command Line (using JUnit)
- Avoid modifying the test source
- Avoid using additional tools
4 Answers
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#testBAfter 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
1I 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 testIn this example, we just run a test method named "testMethod" within Class "GreatTestClass".
For more details, check out
The following command works fine.
mvn -Dtest=SqsConsumerTest -DfailIfNoTests=false test We used IntelliJ, and spent quite a bit of time trying to figure it out too.
Basically, it involves 2 steps:
Step 1: Compile the Test Class
% javac -cp .:"/Applications/IntelliJ IDEA 13 " SetTest.java
Step 2: Run the Test
% java -cp .:"/Applications/IntelliJ IDEA 13 " org.junit.runner.JUnitCore SetTest