Aujourd'hui, j'ai rencontré un problème TDD très difficile. J'ai besoin d'interagir avec un serveur via HTTP POST. J'ai trouvé le Apache Commons HttpClient, qui fait ce dont j'ai besoin.Tests unitaires avec plusieurs collaborateurs
Cependant, je me retrouve avec un tas d'objets collaborateurs de Apache Commons:
public void postMessage(String url, String message) throws Exception {
PostMethod post = new PostMethod(url);
RequestEntity entity = new StringRequestEntity(message,
"text/xml; charset=ISO-8859-1");
post.setRequestEntity(entity);
HttpClient httpclient = new HttpClient();
try {
int result = httpclient.executeMethod(post);
System.out.println("Response status code: " + result);
System.out.println("Response body: ");
System.out.println(post.getResponseBodyAsString());
} finally {
post.releaseConnection();
}
}
J'ai un objet PostMethod
, un objet RequestEntity
et un objet HttpClient
. Je me sens relativement à l'aise en passant par l'injection d'ala dépendance HttpClient
, mais que dois-je faire des autres collaborateurs?
Je pourrais créer un tas de méthodes d'usine (ou une classe d'usine) pour créer les collaborateurs, mais j'ai un peu peur que je me moque trop.
Suivi
Merci pour les réponses! Ma question qui reste est une méthode comme ceci:
public String postMessage(String url, String message) throws Exception {
PostMethod post = new PostMethod(url);
RequestEntity entity = new StringRequestEntity(message,
"text/xml; charset=ISO-8859-1");
post.setRequestEntity(entity);
HttpClient httpclient = new HttpClient();
httpclient.executeMethod(post);
return post.getResponseBodyAsString();
}
Comment puis-je vérifier à juste titre que la valeur retournée est de post.getResponseBodyAsString()
? Aurais-je besoin de simuler post
ainsi que client
?