Случайный сбой теста с Maven и Spring Boot 2, когда вводится WebFluxTest - PullRequest
0 голосов
/ 26 июня 2018

Окружающая среда

  • OSX 10.13.5
  • Java 10.0.1 2018-04-17
  • Apache Maven 3.5.2
  • Spring Boot 2.0.3.RELEASE
  • Плагин Maven Surefire 2.22.0

Выпуск

У меня есть тест, который надежно проходит:

public class TransformerTest {

    private final MyTransformer transformer = new MyTransformerImpl();

    @Rule
    public final OutputCapture outputCapture = new OutputCapture();

    @Test
    public void successShouldLogSuccessMessages() {
        final B result = transformer.transform(new A());
        outputCapture.expect(containsString("First message"));
        outputCapture.expect(containsString("Second message"));
    }

}

Преобразователь использует log4j для записи двух строк через log.debug("First message") и log.debug("Second message"). Я могу выполнить этот тест 1000 раз, и он пройдет.

Когда я представлю этот тестовый класс

@WebFluxTest
@RunWith(SpringRunner.class)
public class DummyTest {

    @Autowired
    private WebTestClient client;

    @MockBean
    private MyService service;

    @Test
    public void dummyTest() {
        doRequest()
            .expectStatus().isAccepted()
            .expectBody().isEmpty();
    }

    private WebTestClient.ResponseSpec doRequest() {
        return client.post()
            .uri("/")
            .exchange();
    }
}

Новый тест надежно проходит - однако первый тест (который, по-видимому, не связан с этим) теперь не проходит только тогда, когда сборка выполняется с Maven .

  • Запуск первого автономного теста через IDE даст 100% надежный проход.
  • Запуск всего набора тестов проекта в IDE (не через Maven) также дает 100% надежный проход.
  • Удаление результатов второго теста при первом прохождении снова 100% надежно - и это единственное отличие исходного кода.

Сообщение об ошибке:

TransformerTest.successShouldLogSuccessMessages Ожидается: (строка, содержащая «Первое сообщение» и строка, содержащая «Второе сообщение»), но: строка, содержащая «Первое сообщение», была «»

Кто-нибудь знает, что может происходить? Является ли первый тест в корне ошибочным, и введение второго теста просто выявляет этот недостаток, или введение второго теста в корне изменило поведение набора тестов?

Конфигурация

Моя полная верная конфигурация:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.0</version>
            <configuration>
                <excludedGroups>com.example.IntegrationTest</excludedGroups>
            </configuration>
</plugin>

Ни один из этих тестов не входит в группу интеграционных тестов. Я не изменил верные значения по умолчанию для параллелизма или разветвления. Поскольку это проблема, с которой я сталкиваюсь при работе с Maven через верный огонь, возможно ли, что это состояние гонки?

Я могу воспроизвести эту проблему со 100% надежностью на нескольких машинах.

...