John Knight created SUREFIRE-1603:
-------------------------------------

             Summary: Output captured under wrong test in JUnit 5 parallel mode
                 Key: SUREFIRE-1603
                 URL: https://issues.apache.org/jira/browse/SUREFIRE-1603
             Project: Maven Surefire
          Issue Type: Bug
          Components: JUnit 5.x support
    Affects Versions: 2.22.1, 3.0.0-M1
            Reporter: John Knight


Using JUnit 5.31 with the following configuration:
{noformat}
<configurationParameters>
    junit.jupiter.execution.parallel.enabled = true
    junit.jupiter.execution.parallel.config.dynamic.factor = 8
    junit.jupiter.extensions.autodetection.enabled = true
</configurationParameters>{noformat}
and the following tests (for demonstration purposes)
{noformat}
public class AppTest
{
    @Test
    public void mogbyTrue()
    {
        for (int i = 0; i < 5; i++) {
            System.out.println("mogby " + Thread.currentThread().getName());
        }
        assertTrue( false );
    }
    @Test
    public void kermitTrue()
    {
        for (int i = 0; i < 5; i++) {
            System.out.println("kermit " + Thread.currentThread().getName());
        }
        assertTrue( false );
    }{noformat}
When the tests are executed via mvn test, the messages from both tests appear 
under the output for the first test:
{noformat}
<testcase name="mogbyTrue" classname="com.foo.logtest.AppTest" time="0.013">
    <failure message="expected: ...
    </failure>
<system-out><![CDATA[mogby ForkJoinPool-1-worker-43
kermit ForkJoinPool-1-worker-50
mogby ForkJoinPool-1-worker-43
kermit ForkJoinPool-1-worker-50
mogby ForkJoinPool-1-worker-43
kermit ForkJoinPool-1-worker-50
mogby ForkJoinPool-1-worker-43
kermit ForkJoinPool-1-worker-50
mogby ForkJoinPool-1-worker-43
kermit ForkJoinPool-1-worker-50
]]></system-out>
</testcase>{noformat}
If I change the code to use TestReporter.publishEntry(), the messages don't 
make their way into the surefire reports at all.

If I configure Capturing stdout - 
[https://junit.org/junit5/docs/snapshot/user-guide/#running-tests-capturing-output]
 - The output for both tests is still captured within the <system-out> field of 
the first test, but in a different order:
{noformat}
<system-out><![CDATA[kermit ForkJoinPool-1-worker-50
kermit ForkJoinPool-1-worker-50
kermit ForkJoinPool-1-worker-50
kermit ForkJoinPool-1-worker-50
kermit ForkJoinPool-1-worker-50
mogby ForkJoinPool-1-worker-43
mogby ForkJoinPool-1-worker-43
mogby ForkJoinPool-1-worker-43
mogby ForkJoinPool-1-worker-43
mogby ForkJoinPool-1-worker-43
]]></system-out>{noformat}
The original use case for this, is that we have a whole suite of tests running 
via Jenkins, so when tests fail, it's really difficult to see what the actual 
problem is, as the logging is out of sync.



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

Reply via email to