J'implémente un client qui consomme un service web. Je veux réduire les dépendances et j'ai décidé de me moquer du webservice.
J'utilise mockito, il a l'avantage par rapport à EasyMock de pouvoir se moquer des classes, pas seulement des interfaces. Mais ce n'est pas le point.Stratégies pour se moquer d'un webservice
Dans mon test, j'ai ce code:
// Mock the required objects
Document mDocument = mock(Document.class);
Element mRootElement = mock(Element.class);
Element mGeonameElement = mock(Element.class);
Element mLatElement = mock(Element.class);
Element mLonElement = mock(Element.class);
// record their behavior
when(mDocument.getRootElement()).thenReturn(mRootElement);
when(mRootElement.getChild("geoname")).thenReturn(mGeonameElement);
when(mGeonameElement.getChild("lat")).thenReturn(mLatElement);
when(mGeonameElement.getChild("lon")).thenReturn(mLonElement);
// A_LOCATION_BEAN is a simple pojo for lat & lon, don't care about it!
when(mLatElement.getText()).thenReturn(
Float.toString(A_LOCATION_BEAN.getLat()));
when(mLonElement.getText()).thenReturn(
Float.toString(A_LOCATION_BEAN.getLon()));
// let it work!
GeoLocationFetcher geoLocationFetcher = GeoLocationFetcher
.getInstance();
LocationBean locationBean = geoLocationFetcher
.extractGeoLocationFromXml(mDocument);
// verify their behavior
verify(mDocument).getRootElement();
verify(mRootElement).getChild("geoname");
verify(mGeonameElement).getChild("lat");
verify(mGeonameElement).getChild("lon");
verify(mLatElement).getText();
verify(mLonElement).getText();
assertEquals(A_LOCATION_BEAN, locationBean);
Ce que mon code montre est que je "micro-test" de l'objet consommation. C'est comme si j'allais implémenter mon code productif dans mon test. Un exemple pour le résultat xml est London on GeoNames. À mon avis, c'est beaucoup trop granuleux.
Mais comment puis-je me moquer d'un webservice sans donner aucun résultat? Dois-je laisser l'objet simulé retourner un fichier XML?
Il ne s'agit pas du code, mais de l'approche .
J'utilise 4.x JUnit et Mockito 1.7
Merci, je me suis votre point. Alors, comment voulez-vous "se moquer d'un webservice"? – guerda
Habituellement, je déclarais une interface et créer un wrapper webservice qui implémente l'interface et instancie le webservice – lomaxx
Donc, vous venez de vérifier le résultat, votre client webservice revient? – guerda