Comment puis-je créer un objet fantaisie pour le Printemps WebServiceTemplate?
J'ai une classe qui appelle un service web. Ma classe gère correctement des résultats valides ainsi que des faute générés par le service web. L'appel au service web ressemble à quelque chose comme ceci (bien que ce soit simplifié).
public String callWebService(final String inputXml)
{
String result = null;
try
{
StreamSource input = new StreamSource(new StringReader(inputXml));
StringWriter output = new StringWriter();
_webServiceTemplate.sendSourceAndReceiveToResult(_serviceUri, input, new StreamResult(output));
result = output.toString();
}
catch (SoapFaultClientException ex)
{
result = ex.getFaultStringOrReason();
}
return result;
}
Maintenant, j'ai besoin de créer une certaine unité de tests permettant de tester tous les succès et les conditions de défaillance. Il ne peut pas appeler le service web réelle, alors j'espérais, il y avait des objets fantaisie disponibles pour le côté client de Spring-WS. Personne ne sait d'une maquette d'objets disponibles pour le WebServiceTemplate ou toutes les classes associées? Je devrais simplement essayer d'écrire mon propre et modifier ma classe pour utiliser le WebServiceOperations interface vs WebServiceTemplate?
Vous devez vous connecter pour publier un commentaire.
Michael réponse est très proche, mais ici, c'est l'exemple qui fonctionne.
J'utilise déjà Mockito pour mes tests unitaires, donc je suis familier avec la bibliothèque. Cependant, contrairement à mon expérience précédente avec Mockito, il suffit de tourner en dérision le résultat de retour n'aide pas. J'ai besoin de faire deux choses à tester tous les cas d'utilisation:
Tout d'abord, je devais me rendre compte que je ne peut plus se moquer WebServiceTemplate avec Mockito, puisque c'est une classe concrète (vous devez utiliser EasyMock, si cela est indispensable). Heureusement, l'appel au web service, sendSourceAndReceiveToResult, fait partie de la WebServiceOperations interface. Ce qui exige une modification de mon code d'attendre un WebServiceOperations vs un WebServiceTemplate.
Le code suivant prend en charge le premier cas d'utilisation où un résultat est retourné dans la StreamResult paramètre:
Le soutien pour le second cas d'utilisation est similaire, mais nécessite le lancement d'une exception. Le code suivant crée un SoapFaultClientException qui contient le faultString. Le faultCode est utilisé par le code, je suis en train de tester qui s'occupe de la demande de service web:
Plus de code peut être nécessaire pour ces deux cas d'utilisation, mais ils travaillent pour mes fins.
en fait, je ne sais pas s'il y a préconfiguré les Objets Fantaisie, mais je doute qu'il y ait configuré pour tous vos "Conditions d'échec", de sorte que vous pouvez créer un Ressort spécial ApplicationContext pour votre JUnit Test avec un substitut ou un travail avec un faux Cadre, il n'est pas difficile 🙂
j'ai utilisé le Mockito se Moquer de Cadre pour l'exemple (et tapé vite), mais EasyMock ou votre préféré se moquer de cadre devrait le faire aussi bien