[ 
https://issues.apache.org/jira/browse/SUREFIRE-2087?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17690951#comment-17690951
 ] 

Viktor Adam edited comment on SUREFIRE-2087 at 2/19/23 11:25 PM:
-----------------------------------------------------------------

Can we please reopen this ticket to also address issues with other repeated 
runs? (in our case `@TestTemplate`).

We've put together a test case like this:

 
{code:java}
package demo.surefire2087;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestTemplate;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

@ExtendWith(DemoTestTemplateInvocationContextProvider.class)
public class TestSurefire2087 {

    private static boolean flake = true;
    private int demoValue = 1;

    @ParameterizedTest
    @ValueSource(ints = {0, 1})
    public void testParameterised(int i) {
        assertTrue(i == 1);
    }

    @TestTemplate
    public void testDemoTemplate() {
        assertEquals(demoValue, 1);
    }

    @Test
    public void testPlain() {
        assertTrue(false);
    }

    @Test
    public void testFlakey() {
        if (flake) {
            flake = false;
            assertTrue(false);
        }

        assertTrue(true);
    }

} {code}
This uses the test template context provider:
{code:java}
package demo.surefire2087;

import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.Extension;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.TestTemplateInvocationContext;
import org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider;

import java.lang.reflect.Field;
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;

public class DemoTestTemplateInvocationContextProvider implements 
TestTemplateInvocationContextProvider {
    @Override
    public boolean supportsTestTemplate(ExtensionContext extensionContext) {
        return 
extensionContext.getRequiredTestMethod().getName().toLowerCase().contains("demotemplate");
    }

    @Override
    public Stream<TestTemplateInvocationContext> 
provideTestTemplateInvocationContexts(ExtensionContext extensionContext) {
        return Stream.of(
                new TestTemplateInvocationContext() {
                    @Override
                    public String getDisplayName(int invocationIndex) {
                        return "demo1--" + 
TestTemplateInvocationContext.super.getDisplayName(invocationIndex);
                    }
                },
                new TestTemplateInvocationContext() {
                    @Override
                    public String getDisplayName(int invocationIndex) {
                        return "demo2--" + 
TestTemplateInvocationContext.super.getDisplayName(invocationIndex);
                    }

                    @Override
                    public List<Extension> getAdditionalExtensions() {
                        return Collections.singletonList(new 
BeforeEachCallback() {
                            @Override
                            public void beforeEach(ExtensionContext 
extensionContext) throws Exception {
                                final Object testInstance = 
extensionContext.getRequiredTestInstance();
                                final Field field = 
extensionContext.getRequiredTestClass().getDeclaredField("demoValue");
                                field.setAccessible(true);
                                field.set(testInstance, 2);
                            }
                        });
                    }
                }
        );
    }
} {code}
Executing this with `mvn verify -Dsurefire.rerunFailingTestsCount=2 
-Dtest=TestSurefire2087#<testMethod>` yields the following results on 3.0.0-M9:

 

1. `testParameterised` (fails as expected)

 
{code:java}
[main] [INFO] --- surefire:3.0.0-M9:test (default-test) @ test-module ---
[main] [INFO] Using auto detected provider 
org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
[main] [INFO] 
[main] [INFO] -------------------------------------------------------
[main] [INFO]  T E S T S
[main] [INFO] -------------------------------------------------------
[ThreadedStreamConsumer] [INFO] Running demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 
0, Time elapsed: 0.069 s <<< FAILURE! - in demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [ERROR] 
demo.surefire2087.TestSurefire2087.testParameterised(int)[1]  Time elapsed: 
0.034 s  <<< FAILURE!
...
[main] [INFO] 
[main] [INFO] Results:
[main] [INFO] 
[main] [ERROR] Failures: 
[main] [ERROR] com.atlassian.jira.TestSurefire2087.testParameterised(int)[1]
[main] [ERROR]   Run 1: TestSurefire2087.testParameterised:21 expected: <true> 
but was: <false>
[main] [ERROR]   Run 2: TestSurefire2087.testParameterised:21 expected: <true> 
but was: <false>
[main] [ERROR]   Run 3: TestSurefire2087.testParameterised:21 expected: <true> 
but was: <false>
[main] [INFO] 
[main] [ERROR] demo.surefire2087.TestSurefire2087.testParameterised(int)[1]
[main] [ERROR]   Run 1: TestSurefire2087.testParameterised:21 expected: <true> 
but was: <false>
[main] [ERROR]   Run 2: TestSurefire2087.testParameterised:21 expected: <true> 
but was: <false>
[main] [ERROR]   Run 3: TestSurefire2087.testParameterised:21 expected: <true> 
but was: <false>
[main] [INFO] 
[main] [INFO] 
[main] [ERROR] Tests run: 4, Failures: 2, Errors: 0, Skipped: 0
[main] [INFO] 
[main] [INFO] 
------------------------------------------------------------------------
[main] [INFO] BUILD FAILURE
[main] [INFO] 
------------------------------------------------------------------------{code}
 

 

2. `testPlain` (fails as expected)
{code:java}
[main] [INFO] --- surefire:3.0.0-M9:test (default-test) @ test-module ---
[main] [WARNING] Parameter 'systemProperties' is deprecated: Use 
systemPropertyVariables instead.
[main] [INFO] Using auto detected provider 
org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
[main] [INFO] 
[main] [INFO] -------------------------------------------------------
[main] [INFO]  T E S T S
[main] [INFO] -------------------------------------------------------
[ThreadedStreamConsumer] [INFO] Running demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 
0, Time elapsed: 0.034 s <<< FAILURE! - in demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [ERROR] demo.surefire2087.TestSurefire2087.testPlain  
Time elapsed: 0.018 s  <<< FAILURE!
...
[main] [INFO] 
[main] [INFO] Results:
[main] [INFO] 
[main] [ERROR] Failures: 
[main] [ERROR] com.atlassian.jira.TestSurefire2087.testPlain
[main] [ERROR]   Run 1: TestSurefire2087.testPlain:31 expected: <true> but was: 
<false>
[main] [ERROR]   Run 2: TestSurefire2087.testPlain:31 expected: <true> but was: 
<false>
[main] [ERROR]   Run 3: TestSurefire2087.testPlain:31 expected: <true> but was: 
<false>
[main] [INFO] 
[main] [ERROR] demo.surefire2087.TestSurefire2087.testPlain
[main] [ERROR]   Run 1: TestSurefire2087.testPlain:31 expected: <true> but was: 
<false>
[main] [ERROR]   Run 2: TestSurefire2087.testPlain:31 expected: <true> but was: 
<false>
[main] [ERROR]   Run 3: TestSurefire2087.testPlain:31 expected: <true> but was: 
<false>
[main] [INFO] 
[main] [INFO] 
[main] [ERROR] Tests run: 2, Failures: 2, Errors: 0, Skipped: 0
[main] [INFO] 
[main] [INFO] 
------------------------------------------------------------------------
[main] [INFO] BUILD FAILURE
[main] [INFO] 
------------------------------------------------------------------------{code}
3. `testFlakey` (marked as flake, does NOT mark the build failed, but this is 
expected and is OK)
{code:java}
[main] [INFO] --- surefire:3.0.0-M9:test (default-test) @ test-module ---
[main] [WARNING] Parameter 'systemProperties' is deprecated: Use 
systemPropertyVariables instead.
[main] [INFO] Using auto detected provider 
org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
[main] [INFO] 
[main] [INFO] -------------------------------------------------------
[main] [INFO]  T E S T S
[main] [INFO] -------------------------------------------------------
[ThreadedStreamConsumer] [INFO] Running demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 
0, Time elapsed: 0.031 s <<< FAILURE! - in demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [ERROR] demo.surefire2087.TestSurefire2087.testFlakey  
Time elapsed: 0.016 s  <<< FAILURE!
...
[ThreadedStreamConsumer] [INFO] Running com.atlassian.jira.TestSurefire2087
[ThreadedStreamConsumer] [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 
0, Time elapsed: 0.001 s - in com.atlassian.jira.TestSurefire2087
[ThreadedStreamConsumer] [INFO] Running demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 
0, Time elapsed: 0.001 s - in demo.surefire2087.TestSurefire2087
[main] [INFO] 
[main] [INFO] Results:
[main] [INFO] 
[main] [WARNING] Flakes: 
[main] [WARNING] com.atlassian.jira.TestSurefire2087.testFlakey
[main] [ERROR]   Run 1: TestSurefire2087.testFlakey:38 expected: <true> but 
was: <false>
[main] [INFO]   Run 2: PASS
[main] [INFO] 
[main] [WARNING] demo.surefire2087.TestSurefire2087.testFlakey
[main] [ERROR]   Run 1: TestSurefire2087.testFlakey:38 expected: <true> but 
was: <false>
[main] [INFO]   Run 2: PASS
[main] [INFO] 
[main] [INFO] 
[main] [WARNING] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Flakes: 2
...
[main] [INFO] 
------------------------------------------------------------------------
[main] [INFO] BUILD SUCCESS
[main] [INFO] 
------------------------------------------------------------------------{code}
4. `testDemoTemplate` (should fail but does NOT, marked as flake but one 
parameterized execution always fails)

 
{code:java}
[main] [INFO] --- surefire:3.0.0-M9:test (default-test) @ test-module ---
...
[main] [INFO] -------------------------------------------------------
[main] [INFO]  T E S T S
[main] [INFO] -------------------------------------------------------
[ThreadedStreamConsumer] [INFO] Running demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 
0, Time elapsed: 0.048 s <<< FAILURE! - in demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [ERROR] 
demo.surefire2087.TestSurefire2087.testDemoTemplate  Time elapsed: 0.003 s  <<< 
FAILURE!
...
[main] [INFO] 
[main] [INFO] Results:
[main] [INFO] 
[main] [WARNING] Flakes: 
[main] [WARNING] com.atlassian.jira.TestSurefire2087.testDemoTemplate
[main] [INFO]   Run 1: PASS
[main] [ERROR]   Run 2: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [ERROR]   Run 3: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [ERROR]   Run 4: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [INFO] 
[main] [WARNING] demo.surefire2087.TestSurefire2087.testDemoTemplate
[main] [INFO]   Run 1: PASS
[main] [ERROR]   Run 2: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [ERROR]   Run 3: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [ERROR]   Run 4: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [INFO] 
[main] [INFO] 
[main] [WARNING] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Flakes: 2
...
[main] [INFO] 
------------------------------------------------------------------------
[main] [INFO] BUILD SUCCESS
[main] [INFO] 
------------------------------------------------------------------------{code}
 

If I apply the patch from my previous comment to tell apart different 
parameterized runs of the same test, then it fails as expected:
{code:java}
[main] [INFO] --- surefire:3.0.0-M10-patch-vadam:test (default-test) @ 
test-module ---
[main] [WARNING] Parameter 'systemProperties' is deprecated: Use 
systemPropertyVariables instead.
[main] [INFO] Using auto detected provider 
org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
[main] [INFO] 
[main] [INFO] -------------------------------------------------------
[main] [INFO]  T E S T S
[main] [INFO] -------------------------------------------------------
[ThreadedStreamConsumer] [INFO] Running demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 
0, Time elapsed: 0.046 s <<< FAILURE! - in demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [ERROR] 
demo.surefire2087.TestSurefire2087.testDemoTemplate() demo2--[2]  Time elapsed: 
0.003 s  <<< FAILURE!
...
[main] [INFO] 
[main] [INFO] Results:
[main] [INFO] 
[main] [ERROR] Failures: 
[main] [ERROR] com.atlassian.jira.TestSurefire2087.testDemoTemplate() demo2--[2]
[main] [ERROR]   Run 1: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [ERROR]   Run 2: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [ERROR]   Run 3: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [INFO] 
[main] [ERROR] demo.surefire2087.TestSurefire2087.testDemoTemplate() demo2--[2]
[main] [ERROR]   Run 1: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [ERROR]   Run 2: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [ERROR]   Run 3: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [INFO] 
[main] [INFO] 
[main] [ERROR] Tests run: 4, Failures: 2, Errors: 0, Skipped: 0
[main] [INFO] 
[main] [INFO] 
------------------------------------------------------------------------
[main] [INFO] BUILD FAILURE
[main] [INFO] 
------------------------------------------------------------------------{code}
 

Can you please suggest a way forward here for fixing that? Would you prefer 
reopening this issue, or opening a new one for TestTemplate specifically? 
(unsure if there are more/other cases like that)


was (Author: vadam):
Can we please reopen this ticket to also address issues with other repeated 
runs? (in our case `@TestTemplate`).

We've put together a test case like this:

 
{code:java}
package demo.surefire2087;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestTemplate;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

@ExtendWith(DemoTestTemplateInvocationContextProvider.class)
public class TestSurefire2087 {

    private static boolean flake = true;
    private int demoValue = 1;

    @ParameterizedTest
    @ValueSource(ints = {0, 1})
    public void testParameterised(int i) {
        assertTrue(i == 1);
    }

    @TestTemplate
    public void testDemoTemplate() {
        assertEquals(demoValue, 1);
    }

    @Test
    public void testPlain() {
        assertTrue(false);
    }

    @Test
    public void testFlakey() {
        if (flake) {
            flake = false;
            assertTrue(false);
        }

        assertTrue(true);
    }

} {code}
Executing this with `mvn verify -Dsurefire.rerunFailingTestsCount=2 
-Dtest=TestSurefire2087#<testMethod>` yields the following results on 3.0.0-M9:

 

1. `testParameterised` (fails as expected)

 
{code:java}
[main] [INFO] --- surefire:3.0.0-M9:test (default-test) @ test-module ---
[main] [INFO] Using auto detected provider 
org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
[main] [INFO] 
[main] [INFO] -------------------------------------------------------
[main] [INFO]  T E S T S
[main] [INFO] -------------------------------------------------------
[ThreadedStreamConsumer] [INFO] Running demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 
0, Time elapsed: 0.069 s <<< FAILURE! - in demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [ERROR] 
demo.surefire2087.TestSurefire2087.testParameterised(int)[1]  Time elapsed: 
0.034 s  <<< FAILURE!
...
[main] [INFO] 
[main] [INFO] Results:
[main] [INFO] 
[main] [ERROR] Failures: 
[main] [ERROR] com.atlassian.jira.TestSurefire2087.testParameterised(int)[1]
[main] [ERROR]   Run 1: TestSurefire2087.testParameterised:21 expected: <true> 
but was: <false>
[main] [ERROR]   Run 2: TestSurefire2087.testParameterised:21 expected: <true> 
but was: <false>
[main] [ERROR]   Run 3: TestSurefire2087.testParameterised:21 expected: <true> 
but was: <false>
[main] [INFO] 
[main] [ERROR] demo.surefire2087.TestSurefire2087.testParameterised(int)[1]
[main] [ERROR]   Run 1: TestSurefire2087.testParameterised:21 expected: <true> 
but was: <false>
[main] [ERROR]   Run 2: TestSurefire2087.testParameterised:21 expected: <true> 
but was: <false>
[main] [ERROR]   Run 3: TestSurefire2087.testParameterised:21 expected: <true> 
but was: <false>
[main] [INFO] 
[main] [INFO] 
[main] [ERROR] Tests run: 4, Failures: 2, Errors: 0, Skipped: 0
[main] [INFO] 
[main] [INFO] 
------------------------------------------------------------------------
[main] [INFO] BUILD FAILURE
[main] [INFO] 
------------------------------------------------------------------------{code}
 

 

2. `testPlain` (fails as expected)
{code:java}
[main] [INFO] --- surefire:3.0.0-M9:test (default-test) @ test-module ---
[main] [WARNING] Parameter 'systemProperties' is deprecated: Use 
systemPropertyVariables instead.
[main] [INFO] Using auto detected provider 
org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
[main] [INFO] 
[main] [INFO] -------------------------------------------------------
[main] [INFO]  T E S T S
[main] [INFO] -------------------------------------------------------
[ThreadedStreamConsumer] [INFO] Running demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 
0, Time elapsed: 0.034 s <<< FAILURE! - in demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [ERROR] demo.surefire2087.TestSurefire2087.testPlain  
Time elapsed: 0.018 s  <<< FAILURE!
...
[main] [INFO] 
[main] [INFO] Results:
[main] [INFO] 
[main] [ERROR] Failures: 
[main] [ERROR] com.atlassian.jira.TestSurefire2087.testPlain
[main] [ERROR]   Run 1: TestSurefire2087.testPlain:31 expected: <true> but was: 
<false>
[main] [ERROR]   Run 2: TestSurefire2087.testPlain:31 expected: <true> but was: 
<false>
[main] [ERROR]   Run 3: TestSurefire2087.testPlain:31 expected: <true> but was: 
<false>
[main] [INFO] 
[main] [ERROR] demo.surefire2087.TestSurefire2087.testPlain
[main] [ERROR]   Run 1: TestSurefire2087.testPlain:31 expected: <true> but was: 
<false>
[main] [ERROR]   Run 2: TestSurefire2087.testPlain:31 expected: <true> but was: 
<false>
[main] [ERROR]   Run 3: TestSurefire2087.testPlain:31 expected: <true> but was: 
<false>
[main] [INFO] 
[main] [INFO] 
[main] [ERROR] Tests run: 2, Failures: 2, Errors: 0, Skipped: 0
[main] [INFO] 
[main] [INFO] 
------------------------------------------------------------------------
[main] [INFO] BUILD FAILURE
[main] [INFO] 
------------------------------------------------------------------------{code}
3. `testFlakey` (marked as flake, does NOT mark the build failed, but this is 
expected and is OK)
{code:java}
[main] [INFO] --- surefire:3.0.0-M9:test (default-test) @ test-module ---
[main] [WARNING] Parameter 'systemProperties' is deprecated: Use 
systemPropertyVariables instead.
[main] [INFO] Using auto detected provider 
org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
[main] [INFO] 
[main] [INFO] -------------------------------------------------------
[main] [INFO]  T E S T S
[main] [INFO] -------------------------------------------------------
[ThreadedStreamConsumer] [INFO] Running demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 
0, Time elapsed: 0.031 s <<< FAILURE! - in demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [ERROR] demo.surefire2087.TestSurefire2087.testFlakey  
Time elapsed: 0.016 s  <<< FAILURE!
...
[ThreadedStreamConsumer] [INFO] Running com.atlassian.jira.TestSurefire2087
[ThreadedStreamConsumer] [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 
0, Time elapsed: 0.001 s - in com.atlassian.jira.TestSurefire2087
[ThreadedStreamConsumer] [INFO] Running demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 
0, Time elapsed: 0.001 s - in demo.surefire2087.TestSurefire2087
[main] [INFO] 
[main] [INFO] Results:
[main] [INFO] 
[main] [WARNING] Flakes: 
[main] [WARNING] com.atlassian.jira.TestSurefire2087.testFlakey
[main] [ERROR]   Run 1: TestSurefire2087.testFlakey:38 expected: <true> but 
was: <false>
[main] [INFO]   Run 2: PASS
[main] [INFO] 
[main] [WARNING] demo.surefire2087.TestSurefire2087.testFlakey
[main] [ERROR]   Run 1: TestSurefire2087.testFlakey:38 expected: <true> but 
was: <false>
[main] [INFO]   Run 2: PASS
[main] [INFO] 
[main] [INFO] 
[main] [WARNING] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Flakes: 2
...
[main] [INFO] 
------------------------------------------------------------------------
[main] [INFO] BUILD SUCCESS
[main] [INFO] 
------------------------------------------------------------------------{code}
4. `testDemoTemplate` (should fail but does NOT, marked as flake but one 
parameterized execution always fails)

 
{code:java}
[main] [INFO] --- surefire:3.0.0-M9:test (default-test) @ test-module ---
...
[main] [INFO] -------------------------------------------------------
[main] [INFO]  T E S T S
[main] [INFO] -------------------------------------------------------
[ThreadedStreamConsumer] [INFO] Running demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 
0, Time elapsed: 0.048 s <<< FAILURE! - in demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [ERROR] 
demo.surefire2087.TestSurefire2087.testDemoTemplate  Time elapsed: 0.003 s  <<< 
FAILURE!
...
[main] [INFO] 
[main] [INFO] Results:
[main] [INFO] 
[main] [WARNING] Flakes: 
[main] [WARNING] com.atlassian.jira.TestSurefire2087.testDemoTemplate
[main] [INFO]   Run 1: PASS
[main] [ERROR]   Run 2: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [ERROR]   Run 3: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [ERROR]   Run 4: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [INFO] 
[main] [WARNING] demo.surefire2087.TestSurefire2087.testDemoTemplate
[main] [INFO]   Run 1: PASS
[main] [ERROR]   Run 2: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [ERROR]   Run 3: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [ERROR]   Run 4: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [INFO] 
[main] [INFO] 
[main] [WARNING] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Flakes: 2
...
[main] [INFO] 
------------------------------------------------------------------------
[main] [INFO] BUILD SUCCESS
[main] [INFO] 
------------------------------------------------------------------------{code}
 

If I apply the patch from my previous comment to tell apart different 
parameterized runs of the same test, then it fails as expected:
{code:java}
[main] [INFO] --- surefire:3.0.0-M10-patch-vadam:test (default-test) @ 
test-module ---
[main] [WARNING] Parameter 'systemProperties' is deprecated: Use 
systemPropertyVariables instead.
[main] [INFO] Using auto detected provider 
org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
[main] [INFO] 
[main] [INFO] -------------------------------------------------------
[main] [INFO]  T E S T S
[main] [INFO] -------------------------------------------------------
[ThreadedStreamConsumer] [INFO] Running demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 
0, Time elapsed: 0.046 s <<< FAILURE! - in demo.surefire2087.TestSurefire2087
[ThreadedStreamConsumer] [ERROR] 
demo.surefire2087.TestSurefire2087.testDemoTemplate() demo2--[2]  Time elapsed: 
0.003 s  <<< FAILURE!
...
[main] [INFO] 
[main] [INFO] Results:
[main] [INFO] 
[main] [ERROR] Failures: 
[main] [ERROR] com.atlassian.jira.TestSurefire2087.testDemoTemplate() demo2--[2]
[main] [ERROR]   Run 1: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [ERROR]   Run 2: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [ERROR]   Run 3: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [INFO] 
[main] [ERROR] demo.surefire2087.TestSurefire2087.testDemoTemplate() demo2--[2]
[main] [ERROR]   Run 1: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [ERROR]   Run 2: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [ERROR]   Run 3: TestSurefire2087.testDemoTemplate:26 expected: <2> but 
was: <1>
[main] [INFO] 
[main] [INFO] 
[main] [ERROR] Tests run: 4, Failures: 2, Errors: 0, Skipped: 0
[main] [INFO] 
[main] [INFO] 
------------------------------------------------------------------------
[main] [INFO] BUILD FAILURE
[main] [INFO] 
------------------------------------------------------------------------{code}
 

Can you please suggest a way forward here for fixing that? Would you prefer 
reopening this issue, or opening a new one for TestTemplate specifically? 
(unsure if there are more/other cases like that)

> rerunFailingTestsCount incorrectly marks failed parametrized test as pass
> -------------------------------------------------------------------------
>
>                 Key: SUREFIRE-2087
>                 URL: https://issues.apache.org/jira/browse/SUREFIRE-2087
>             Project: Maven Surefire
>          Issue Type: Bug
>    Affects Versions: 3.0.0-M4
>            Reporter: Ramanan Rajendran
>            Priority: Major
>
> rerunFailingTestsCount is not working as expected with junit5 
> `@ParameterizedTest` 
> If 1st iteration of the test passes and the 2nd one fails, it still marks the 
> test as flaky passed. 
> Eg: In the following run, iteration 1 with input A passed but iteration 2 
> with input B failed. Iteration 2 was rerun 2 times and failed in all the 
> attempts. Instead of failing TestA, it's marked as flaky giving an overall 
> pass for the test suite. I believe it's using the Run 1 PASS as a gate to 
> mark the whole test as a pass. 
>  
> [INFO]  Run 1: PASS
> [ERROR]  Run 2: TestA.iteration2:101 1 expectation failed.
> Expected status code <400> doesn't match actual status code <401>.
> [ERROR]  Run 3: TestA.iteration2:101 1 expectation failed.
> Expected status code <400> doesn't match actual status code <401>.
> [ERROR]  Run 4: TestA.iteration2:101 1 expectation failed.
>  <400> doesn't match actual status code <401>.
>  
> Tests run: 23, Failures: 0, Errors: 0, Skipped: 2, Flakes: 1



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to