Introduction
JUnit is a testing framework for Java. It is primarily aimed for IDEs, but with some perseverance it can be used on the command line.
ConsoleLauncher
You will need ConsoleLauncher, a java executable, to run JUnit from the command line. At time of writing the latest version is junit-platform-console-standalone-1.6.0.jar
and can be downloaded from the Maven Repository. Download this file to your working directory.
Create a sample java file
Using your text editor of choice create a file called SampleUnit.java
and copy and paste the following code in it:
public class SampleUnit { public int addInts(int a, int b){ return a + b; } public boolean validAboveZero(int a) { if (a>0) { return true; } return false; } }
Create a sample test file
Creating a file called SampleUnitTest.java
copy the following:
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertEquals; import org.junit.Test; public class SampleUnitTest { @Test public void testAddInts() { SampleUnit sampleUnit = new SampleUnit(); int result = sampleUnit.addInts(2, 2); // The below should fail. assertEquals("Not adding correctly!", 5, result); } @Test public void testValidAboveZero() { SampleUnit sampleUnit = new SampleUnit(); boolean result = sampleUnit.validAboveZero(2); assertTrue(result); } @Test public void testValidFail() { boolean result = false; assertFalse(result); } }
Compile
Run the following from the command line:
javac SampleUnit.java javac -cp junit-platform-console-standalone-1.6.0.jar:. SampleUnitTest.java
This assumes the JUnit jar, SampleUnit.java
and SampleUnitTest.java
are all in the same directory. The compiler will create two new files: SampleUnit.class
and SampleUnitTest.class
.
Run the tests
Finally at the command line run:
java -jar junit-platform-console-standalone-1.6.0.jar --class-path . -c SampleUnitTest
This should output something like this:
Thanks for using JUnit! Support its development at https://junit.org/sponsoring ╷ ├─ JUnit Jupiter ✔ └─ JUnit Vintage ✔ └─ SampleUnitTest ✔ ├─ testAddInts ✘ Not adding correctly! expected:<5> but was:<4> ├─ testValidFail ✔ └─ testValidAboveZero ✔ Failures (1): JUnit Vintage:SampleUnitTest:testAddInts MethodSource [className = 'SampleUnitTest', methodName = 'testAddInts', methodParameterTypes = ''] => java.lang.AssertionError: Not adding correctly! expected:<5> but was:<4> org.junit.Assert.fail(Assert.java:89) org.junit.Assert.failNotEquals(Assert.java:835) org.junit.Assert.assertEquals(Assert.java:647) SampleUnitTest.testAddInts(SampleUnitTest.java:13) java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.base/java.lang.reflect.Method.invoke(Method.java:566) org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59) org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) [...] Test run finished after 43 ms [3 containers found] [0 containers skipped] [3 containers started] [0 containers aborted] [3 containers successful] [0 containers failed] [3 tests found] [0 tests skipped] [3 tests started] [0 tests aborted] [2 tests successful] [1 tests failed]
ConsoleLauncher Options Frustration
The ConsoleLauncher has an extensive list of command line options for providing arguments. Above I’ve gone for --class-path . -c SampleUnitTest
defined respectively as:
-cp, --classpath, --class-path=PATH[;|:PATH...] Provide additional classpath entries -- for example, for adding engines and their dependencies. This option can be repeated. -c, --select-class=CLASS Select a class for test discovery. This option can be repeated.
Why these two specifically? A simple reason - after a couple of hours reading stack overflow and trying various random combinations, it appears to be the only option I could get to work. This may be due to my incompetence, my setup (openjdk 11.0.6) or a bug.
Top comments (0)