maven-surefire icon indicating copy to clipboard operation
maven-surefire copied to clipboard

[SUREFIRE-2148] Build fails if retried test classes failed during setup

Open jira-importer opened this issue 2 years ago • 2 comments

Pavlo Shevchenko opened SUREFIRE-2148 and commented

Summary

If a JUnit5 test class fails during setup and succeeds on retry, then the surefire test goal and entire build will fail. On the other hand, if the failure occurs in a test method which succeeds on retry, then the goal and the build will succeed.

 

Reproducer

Test class with flaky setup:

package example;

import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class FlakyClassTest {

    @BeforeAll
    public static void setup() throws IOException {
        String testSetupMarkerFile = "testSetupMarker.txt";
        if (!new File(testSetupMarkerFile).exists()) {
            System.out.println("I'm failing!");
            Files.write(Paths.get(testSetupMarkerFile), "Hello".getBytes());
            throw new RuntimeException("I'm failing!");
        } else {
            System.out.println("I'm passing!");
        }
    }

    @Test
    public void test() {
    }
} 

 

Test class with flaky method:

package example;

import org.junit.jupiter.api.Test;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class FlakyMethodTest {

    @Test
    public void test() throws IOException {
        String testMethodMarkerFile = "testMethodMarker.txt";
        if (!new File(testMethodMarkerFile).exists()) {
            System.out.println("I'm failing!");
            Files.write(Paths.get(testMethodMarkerFile), "Hello".getBytes());
            throw new RuntimeException("I'm failing!");
        } else {
            System.out.println("I'm passing!");
        }
    }
}

Surefire config:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.0.0-M8</version>
    <configuration>
        <rerunFailingTestsCount>1</rerunFailingTestsCount>
    </configuration>
</plugin>

 

Actual behavior

  1. This execution succeds:
mvn test -Dtest=*FlakyMethod*
  1. This execution fails:
mvn test -Dtest=*FlakyClass*

 

Expected behavior

  1. Both executions succeed

 

 

 


Affects: 3.0.0-M8

1 votes, 3 watchers

jira-importer avatar Feb 10 '23 15:02 jira-importer

Pavlo Shevchenko commented

Just stumbled over it again. It is a regression between 3.0.0-M4 and 3.0.0-M5. As of 3.5.1, it is still not working

jira-importer avatar Oct 10 '24 07:10 jira-importer

I confirm this problem with Surefire Plugin 3.5.1. Is there any plan to address it?

mauromol avatar Oct 09 '25 09:10 mauromol