[JAVA] NoHttpResponseException dans Spring Boot + WireMock

un événement

Correction d'une application commerciale Spring Boot. Il existe un endroit dans l'application qui utilise RestTemplate pour appeler l'API REST d'autres systèmes liés, et le test unitaire, y compris cette partie, a été effectué en configurant un serveur simulé avec WireMock.

Quand j'ai ajouté un test en fonction de la rénovation, le test existant du coup NoHttpResponseException:[server] failed to respond J'ai commencé à mousser avec des exceptions.

Il semble que ce ne soit pas une erreur du test lui-même car il est dans un état où il réussit lorsque le test est exécuté seul et il est mousse lorsqu'il est exécuté à travers lui. L'enquête a donc commencé.

Cause

Cela semble être un bogue qui se produit lorsque HttpURLConnection est utilisé pour le client Http de l'application qui accède à WireMock.

https://github.com/tomakehurst/wiremock/issues/97 Spring Rest Template utilise également HttpURLConnection en interne, il est donc applicable.

Contre-mesures

Utilisez une maquette de fil à ressort-nuage-contrat.

https://github.com/tomakehurst/wiremock/issues/97 Le problème présente plusieurs types de contre-mesures, il semble donc que vous devriez adopter celle que vous aimez. Les critères de sélection sont les suivants.

Comme son nom l'indique, spring-cloud-contract-wiremock utilise wireMock en interne, les modifications apportées au code de test étaient donc minimes. Plus précisément, changez simplement la notation des paramètres du serveur et spécifiez le répertoire de la ressource de test existante. Voir Officiel pour une utilisation détaillée.

Configuration(before)


public class ExampleUnitTest {
    @Rule
    public WireMockRule wireMockRule = new WireMockRule(8080);
.... 

Configuration(after)


@AutoConfigureWireMock(port = 8080, stubs = "classpath*:/META-INF/**/mappings/**/*.json")
public class ExampleUnitTest {
....

Comme mentionné ci-dessus, dans mon cas, le code de test existant peut être passé tel quel simplement en changeant le chemin de la ressource de test spécifiée par stubs =.

Recommended Posts

NoHttpResponseException dans Spring Boot + WireMock
Définir le paramètre contextuel dans Spring Boot
Multi-projets Spring Boot 2 avec Gradle
Changements majeurs dans Spring Boot 1.5
Développement d'applications Spring Boot dans Eclipse
Écrire du code de test avec Spring Boot
Implémenter l'API REST avec Spring Boot
Qu'est-ce que @Autowired dans Spring Boot?
Comment utiliser Thymeleaf avec Spring Boot
Créer une image Spring Boot + Docker avec Gradle
Priorité d'accès aux fichiers statiques dans Spring Boot
Sortie du journal Spring Boot au format json
Mémorandum de téléchargement de fichier local avec Spring Boot
Défi Spring Boot
Créer un projet Java Spring Boot avec IntelliJ
Desserrer la vérification de la syntaxe de Thymeleaf dans Spring Boot
[Entraine toi! ] Affichez Hello World avec Spring Boot
Utiliser la méthode de requête DynamoDB avec Spring Boot
Forme de botte de printemps
Spring Boot Rappelez-vous
gae + botte à ressort
DI SessionScope Bean dans le filtre Spring Boot 2
Modifier le délai d'expiration de la session dans Spring Boot
Cookie SameSite dans Spring Boot (Spring Web MVC + Tomcat)
Exécuter un projet Spring Boot avec VS Code
Sortie des journaux de demande et de réponse avec Spring Boot
Utiliser le filtre de servlet avec Spring Boot [compatible Spring Boot 1.x, 2.x]
Comment ajouter un chemin de classe dans Spring Boot
Conseils Java - Créez un projet Spring Boot avec Gradle
Comment se lier avec un fichier de propriétés dans Spring Boot
Annotations utilisées dans les outils de gestion des tâches Spring Boot
Afficher la tâche Gradle dans le projet Spring Boot
Fiche d'apprentissage SPRING BOOT 01
Botte de printemps + Heroku Postgres
Rédaction de mémo de démarrage de printemps (1)
Première botte à ressort (DI)
Fiche d'apprentissage SPRING BOOT 02
Aide-mémoire Spring Boot2
Gestion des exceptions Spring Boot
Mappage du servlet Spring Boot
Environnement de développement-développement Spring Boot-
Procédure d'apprentissage Spring Boot
Utilisez Interceptor au printemps
Apprentissage de Spring Boot [Début]
Microservices dans Spring Cloud
Résumé du document Spring Boot 2.2
[Spring Boot] DataSourceProperties $ DataSourceBeanCreationException
Disponibilité de l'application Spring Boot 2.3
Tutoriels Spring Boot Sujets
Obtenez des cookies au printemps
Télécharger avec Spring Boot
Spécifiez le codage des ressources statiques dans Spring Boot
Inclure le pot externe dans le package avec Spring boot2 + Maven3
Exécution asynchrone des requêtes examinée dans Spring Boot 1.5.9
Comment créer un projet Spring Boot dans IntelliJ
SSO avec GitHub OAuth dans l'environnement Spring Boot 1.5.x
Comment utiliser CommandLineRunner dans Spring Batch of Spring Boot
Testez la classe injectée sur le terrain dans le test de démarrage Spring sans utiliser le conteneur Spring
Jusqu'à ce que vous commenciez à développer avec Spring Boot dans eclipse 1
Essayez gRPC dans le projet Spring Boot et Spring Cloud (Mac OS)
Présentez swagger-ui à l'API REST implémentée dans Spring Boot