J'ai une application Spring-Boot 2.1.4 avec des tests n-RestDoc pour le contrôleur de Flux.
Environnement:
Si j'ajoute la dépendance spring-clout-starter-sleuth à l'application, une partie du test doc échoue dans la construction maven. Important sur différents environnements, différentes classes de test échouent avec:
@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() ...
}
Si vous exécutez le test de vérification avec maven -Dtest = OptDocTest , le test n'échouera pas, également si un test d'ensemble (pas tous) était spécifié.
Dépendance
<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>
Tous les tests semblent similaires
java.lang.IllegalStateException: org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext@6516dd09 has been closed already ....
Tous les tests informatiques avec une application de démarrage en cours d'exécution fonctionne correctement.
Je n'ai aucune idée de ce qui ne va pas et pourquoi le AnnotationConfigReactiveWebServerApplicationContext est fermé.
Sur une boîte Windows, le test reste doc pour le contrôleur avec un contenu de flux échoue sur une boîte Linux pour le contrôleur avec un contenu mono.
3 Réponses :
Il est résolu si je reviens à spring-cloud-starter-sleuth dans la version 2.1.0.RELEASE et si je supprime toutes les exclusions. utilisez la version 2.1.1.RELEASE l'erreur se produit.
Et cela ne semble pas non plus avoir été résolu dans 2.1.3-RELEASE
Même problème que j'ai également rencontré. J'ai résolu le problème en rétrogradant Sleuth à 2.0.3.RELEASE (2.1.0 ne fonctionne pas non plus avec moi). La version de Mine Spring Boot est 2.0.5.RELEASE .
Si la version 2.0.3 ne fonctionne toujours pas pour vous, essayez une version de rétrogradation supplémentaire à partir de mvn repo
Cela a été signalé comme un bogue dans la liste des problèmes de sleuth github github.com/spring-cloud/spring-cloud-sleuth/issues/1450
Si vous, comme moi, avez eu cette situation en ce qui concerne les tests junit, alors je l'ai résolue en supprimant toutes les annotations @DirtiesContext dans chaque classe de test junit que j'avais dans mon projet. p >
Pourquoi excluez-vous les versions Spring de la dépendance Sleuth?
Très facile - J'ai Spring Boot 2.1.4 et Spring-Framework 5.1.6 et j'ai commencé avec la version 2.1.0 de sleuth et cela avait des versions différentes, donc j'avais un mélange de versions de printemps.
Info: même comportement si je supprime toutes les exclusions de la dépendance de détective
Pourquoi modifiez-vous les versions de ressort? Il devrait provenir de Boot. De plus, il serait bon d'avoir le stacktrace complet ou des informations supplémentaires car actuellement je ne sais pas comment vous aider
spring-cloud-starter-sleuthvient de springframework.cloud et a sa propre dépendance et ne fait pas partie de spring-boot, mais il ne fait aucune différence car sans exclusions, la même erreur se produit.