When JUnit Jupiter's Vintage Engine is used to run tests written using the JUnit 4 API, output to the console from a TestRunner results in Surefire's STDOUT being corrupted:
Note that the test runner is simply calling System.out. This is to simulate the real world setup where the runner performs some logging that ultimately results in a console appender calling System.out. The same arrangement does not cause a problem when run using JUnit 4. An initial investigation suggests that the Vintage Engine calls the custom TestRunner earlier and, it would appear, at a time when Surefire cannot tolerate output to System.out.
I have attached a minimal project that reproduces the problem. Running ./mvnw -Pjunit5 test will reproduce the corruption. Running ./mvnw -Pjunit4 test will not.