У меня есть приложение Spring-Boot 2.1.4 с тестами n-RestDoc для контроллера Flux.
Среда:
- Spring-Boot 2.1.4
- Junit 5.4.0
- spring-restdocs-webtestclient
- spring-webflux
Если я добавлю в приложение зависимость spring-clout-starter-sleuth,некоторые из тестов doc терпят неудачу в сборке maven.Важно, что в разных средах разные классы тестов завершаются с ошибкой:
java.lang.IllegalStateException: org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext@6516dd09 has been closed already ....
Если запустить тест с ошибкой с помощью maven -Dtest=OptDocTest
, тест не завершится неудачей, даже если набор (не все) тестов указан там.
Зависимость
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
<version>2.1.1.RELEASE</version>
<exclusions> <!-- exclude old spring versions -->
<exclusion>
<artifactId>*</artifactId>
<groupId> org.springframework.security</groupId>
</exclusion>
<exclusion>
<artifactId>spring-aop</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</dependency>
Все тесты выглядят симулированными
@ExtendWith({ RestDocumentationExtension.class, SpringExtension.class })
@AutoConfigureRestDocs("target/generated-snippets")
@SpringBootTest(//webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
classes = { ArchimedesApplication.class })
class OptControllerDocTest {
@MockBean
private SrkConnector srkTConnector;
@Autowired
private ApplicationContext context;
private WebTestClient webTestClient;
@BeforeEach
void beforeEach(RestDocumentationContextProvider restDocumentation) {
this.webTestClient = WebTestClient.bindToApplicationContext(context)
.configureClient()
.filter(documentationConfiguration(restDocumentation))
.build();
}
@Test
void documentationTest() throws IOException {
this.webTestClient.post()
.uri("/opt")
.contentType(MediaType.APPLICATION_JSON)
.body(BodyInserters.fromObject(testRequest))
.exchange()
.expectStatus() // here the error occur
.isOk()
.expectBody() ...
}
Все IT-тестирование с работающим загрузочным приложением работает правильно.
Понятия не имею, что идет не так и почему закрывается AnnotationConfigReactiveWebServerApplicationContext
.
В окне с Windows тест остальной документации для контроллера с содержимым потока завершается неудачей на компьютере с Linux для контроллера с моно содержимым.