Добавление зависимости Spring-Cloud-Starter-Sleuth к приложению Spring-Boot некоторые из тестов Rest Doc не удалось - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть приложение 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 для контроллера с моно содержимым.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Такую же проблему я тоже встречал.Я решил проблему путем понижения Sleuth до 2.0.3.RELEASE (2.1.0 также не работает со мной).Версия Mine Spring Boot 2.0.5.RELEASE.
Если 2.0.3 все еще не работает для вас, попробуйте более низкую версию с mvn repo

0 голосов
/ 10 апреля 2019

Решается, если я вернусь к spring-cloud-starter-sleuth в версии 2.1.0.RELEASE и удаляю все исключения.

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-sleuth</artifactId>
      <version>2.1.0.RELEASE</version>
</dependency>

Если я использую версию 2.1.1.RELEASE, возникает ошибка.

...