Description
It would be helpful if assumption violations would be reflected on the text UI. For this test class with three test methods:
package org.gerritcon.mv2016;
import static org.junit.Assert.assertEquals;
import static org.junit.Assume.assumeTrue;
import org.junit.Test;
public class PrintyTest {
@Test
public void test_passed() {
assertEquals("foo", "foo");
}
@Test
public void test_failed() {
assertEquals("foo", "bar");
}
@Test
public void test_assumption_violation() {
assumeTrue(false);
}
}
JUnit text UI produces this result:
$ java -classpath buck-out/gen/lib__printy_tests#testsjar__output/printy_tests#testsjar.jar:/home/davido/Downloads/hamcrest-core-1.3.jar:/home/davido/Downloads/junit-4.12.jar org.junit.runner.JUnitCore org.gerritcon.mv2016.PrintyTest
JUnit version 4.12
..E.
Time: 0.008
There was 1 failure:
1) test_failed(org.gerritcon.mv2016.PrintyTest)
org.junit.ComparisonFailure: expected:<[foo]> but was:<[bar]>
at org.junit.Assert.assertEquals(Assert.java:115)
[...]
at org.junit.runner.JUnitCore.main(JUnitCore.java:36)
FAILURES!!!
Tests run: 3, Failures: 1
The impression is that 2 tests were successful even though, only single test was successful and another one failed with assumption violation. This information is lost.
Compared to it the output from Buck build tool is:
$ buck test :printy_tests
FAILURE org.gerritcon.mv2016.PrintyTest test_failed: expected:<[foo]> but was:<[bar]>
[-] PROCESSING BUCK FILES...FINISHED 0.0s 🏖 (Watchman reported no changes)
[-] DOWNLOADING... (0.00 B/S AVG, TOTAL: 0.00 B, 0 Artifacts)
[-] BUILDING...FINISHED 0.0s [100%] (6/6 JOBS, 0 UPDATED, 0 [0.0%] CACHE MISS)
[-] TESTING...FINISHED 0.3s (1 PASS/1 SKIP/1 FAIL)
RESULTS FOR //:printy_tests
FAIL <100ms 1 Passed 1 Skipped 1 Failed org.gerritcon.mv2016.PrintyTest
FAILURE org.gerritcon.mv2016.PrintyTest test_failed: expected:<[foo]> but was:<[bar]>
org.junit.ComparisonFailure: expected:<[foo]> but was:<[bar]>
at org.junit.Assert.assertEquals(Assert.java:115)
[...]
at java.lang.Thread.run(Thread.java:748)
TESTS FAILED: 1 FAILURE
Failed target: //:printy_tests
This line reflects more accurately what happened:
FAIL <100ms 1 Passed 1 Skipped 1 Failed org.gerritcon.mv2016.PrintyTest
You may wonder, why would I care to improve text JUnit UI; in the end devs are using dedicated build tools and IDE integrations and not java -classpath sut.jar:junit.jar org.junit.runner.JUnitCore <test class>
?
It turns out, that other build tools rely on JUnit text UI to report test outcome. Given that assumption violation is lost here, the other build tools also cannot offer more accurate test outcome.