引入WebFluxTest时,似乎使用Maven和Spring Boot 2进行随机测试失败

时间:2018-06-26 17:38:35

标签: spring-boot maven-3 maven-surefire-plugin spring-webflux

环境

  • 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")记录两行。我可以运行此测试1,000次,它将通过。

当我介绍这个测试课程时

@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   预期:(包含“第一条消息”的字符串和包含“第二条消息”的字符串),但:包含“第一条消息”的字符串为“”

有人知道会发生什么吗?第一个测试是否已经从根本上存在缺陷,而第二个测试的引入仅仅是在暴露此缺陷,还是第二个测试的引入从根本上改变了测试套件的行为?

配置

我的整个surefire配置是:

<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>

这些测试都不是集成测试组的一部分。我尚未修改用于并行或派生的surefire默认值。由于这只是我通过surefire与Maven一起运行时遇到的一个问题,这是否可能是竞争条件?

我可以在多台机器上以100%的可靠性重现此问题。

0 个答案:

没有答案