2015-08-16 1 views
1

Lors de la tentative de test de la classe Client, l'enchaînement des appels POST fonctionne correctement, contrairement à GET. Qu'est-ce que je fais mal ici/ne pas comprendre correctement?WireMock - Stubbing GET avec le corps ne fonctionne pas lorsque le talonnage POST fonctionne correctement

code client (POST):

HttpResponse httpResponse = new DefaultHttpRequestBuilder(HttpMethod.POST, SERVICE_URL_GET_MAGIC) 
       .withBody(parseMagic(magicName)) 
       .execute(); 

Avec stubbing (POST):

stubFor(post(urlEqualTo("/api/get-magic")) 
     .withRequestBody(equalToJson(magicNameParsed)) 
     .willReturn(aResponse() 
       .withHeader("Content-Type", "application/json") 
       .withBody(magicDtoParsed))); 

fonctionne correctement (httpResponse aura 200 OK).

Lorsque GET utiliser, il n'atteint pas l'appel api (httpResponse sera 404 non trouvé).

HttpResponse httpResponse = new DefaultHttpRequestBuilder(HttpMethod.GET, SERVICE_URL_GET_MAGIC) 
        .withBody(parseMagic(magicName)) 
        .execute(); 

stubFor(get(urlEqualTo("/api/get-magic")) 
     .withRequestBody(equalToJson(magicNameParsed)) 
     .willReturn(aResponse() 
       .withHeader("Content-Type", "application/json") 
       .withBody(magicDtoParsed))); 

Répondre

1

Je pense que le problème est que vous vous attendez à un « corps » dans votre requête get, mais recevoir des demandes ne peuvent pas avoir un corps (seulement PUT et POST demandes peuvent avoir un corps).

essayer de faire ce qui suit

stubFor(get(urlEqualTo("/api/get-magic")) 
     .willReturn(aResponse() 
       .withHeader("Content-Type", "application/json") 
       .withBody(magicDtoParsed))); 

Notez que j'ai enlevé la ligne .withRequestBody(equalToJson(magicNameParsed))

Soit dit en passant. Le poignardage est lorsque vous utilisez un couteau ou un objet pointu pour blesser quelqu'un/quelque chose. Stubbing est le mot que vous voulez utiliser quand vous parlez dans le contexte de test :)

+0

Désolé pour le stAbbing, il m'a montré la correction automatique et je suis juste suivi :) l'éditera. En ce qui concerne le corps dans la demande GET, j'ai réfléchi à ce sujet, et finalement découvert que c'est * ok * http://stackoverflow.com/questions/978061/http-get-with-request-body et, mon client * faire * Attendez-y. – Stas

+1

Wow, je ne savais pas que c'était autorisé ... mais comme les gens l'ont mentionné, c'est une mauvaise idée et on finira par mentionner que ce n'est pas autorisé. Ma suggestion serait: faites-le bien, et supprimez le besoin d'avoir un corps. Personnellement, sur les quelques centaines d'API que j'ai utilisées, je n'ai jamais vu une requête GET nécessitant un corps. – Augusto

+0

Oui. Aucun exemple du GET avec le contenu du corps. Bien que ce soit correct comme le lien dans le post précédent, j'utiliserai POST pour mes besoins. Merci. – Stas