You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Andy Wilkinson (JIRA)" <ji...@apache.org> on 2018/12/11 16:41:00 UTC

[jira] [Created] (SUREFIRE-1614) JUnit Runner that writes to System.out corrupts Surefire's STDOUT when using JUnit's Vintage Engine

Andy Wilkinson created SUREFIRE-1614:
----------------------------------------

             Summary: JUnit Runner that writes to System.out corrupts Surefire's STDOUT when using JUnit's Vintage Engine
                 Key: SUREFIRE-1614
                 URL: https://issues.apache.org/jira/browse/SUREFIRE-1614
             Project: Maven Surefire
          Issue Type: Bug
          Components: JUnit 5.x support
    Affects Versions: 3.0.0-M2, 2.22.1
            Reporter: Andy Wilkinson
         Attachments: surefire-stream-corruption-bug.zip

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:
{noformat}
[WARNING] Corrupted STDOUT by directly writing to native stream in forked JVM 1. See FAQ web page and the dump file […]{noformat}
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.





--
This message was sent by Atlassian JIRA
(v7.6.3#76005)