2016-01-12 1 views
2

Documentation suggère de tester un client API basé sur WSClient en utilisant un service Web fictif, c'est-à-dire créer un play.server.Server qui répondra aux requêtes HTTP réelles.Comment créer un objet WSResponse à partir d'une chaîne pour Play WSClient

Je préférerais créer des objets WSResponse directement à partir de fichiers, avec ligne d'état, lignes d'en-tête et corps, sans connexions TCP réelles. Cela nécessiterait moins de dépendances et fonctionnerait plus vite. Il peut également y avoir d'autres cas où cela est utile.

Mais je ne peux pas trouver un moyen simple de le faire. Il semble que toutes les implémentations enveloppées par WSResponse sont liées à la lecture du réseau. Dois-je simplement créer ma propre sous-classe de WSResponse pour cela, ou peut-être que je me trompe et existe déjà?

+0

Vous devez utiliser Play WSClient? Vous pouvez vérifier le framework Resitio Mock pour les tests. Je conseillerais, développeur déjà en train de créer toute cette classe, prendre cette classe en tant que .jar et créer un service fictif hors de celui-ci. –

+1

@BostonStar Oui, je suis lié à WSClient. Nous utilisons junit + mockito. Comment Resito va-t-il aider à créer des objets WSResponse? –

+0

Je pense que vous pouvez accéder directement à l'objet original et créer un service fictif. –

Répondre

0

L'API pour le jeu semble intentionnellement obtuse. Vous devez utiliser leurs classes "Cacheable", qui sont les seules qui semblent directement instanciables à partir d'objets que vous auriez.

Cela devrait vous aider à démarrer:

import play.api.libs.ws.ahc.AhcWSResponse; 
import play.api.libs.ws.ahc.cache.CacheableHttpResponseBodyPart; 
import play.api.libs.ws.ahc.cache.CacheableHttpResponseHeaders; 
import play.api.libs.ws.ahc.cache.CacheableHttpResponseStatus; 
import play.shaded.ahc.io.netty.handler.codec.http.DefaultHttpHeaders; 
import play.shaded.ahc.org.asynchttpclient.Response; 
import play.shaded.ahc.org.asynchttpclient.uri.Uri; 

AhcWSResponse response = new AhcWSResponse(new Response.ResponseBuilder() 
     .accumulate(new CacheableHttpResponseStatus(Uri.create("uri"), 200, "status text", "protocols!")) 
     .accumulate(new CacheableHttpResponseHeaders(false, new DefaultHttpHeaders().add("My-Header", "value"))) 
     .accumulate(new CacheableHttpResponseBodyPart("my body".getBytes(), true)) 
     .build()); 

Le mystère des valeurs booléennes ne sont pas documentées. Ma conjecture est le booléen pour BodyPart est de savoir si c'est la dernière partie du corps. Ma conjecture pour Headers est de savoir si les en-têtes sont dans la bande-annonce d'un message.

+1

Merci pour la réponse! Solution assez indirecte, mais n'ayant rien de mieux intégré, je l'accepte. –

+0

Oui, je ne l'ai toujours pas réussi à analyser correctement. Le message d'erreur énigmatique n'a pas aidé, alors j'ai factorisé cela afin que je puisse réellement tester les choses. –