Comment se moquer de distance API REST dans l'unité de test avec le Printemps?

Assumer, j'ai fait un simple client dans mon application qui utilise un service web distant qui est d'exposer une API RESTful à un URI /foo/bar/{baz}. Maintenant, je souhaite l'unité de test de mon client qui effectue des appels de ce service web.

Idéalement, dans mes tests, j'aimerais en dérision les réponses que je reçois à partir du service web, compte tenu d'une demande spécifique, comme /foo/bar/123 ou /foo/bar/42. Mon client assume l'API est en train de tourner quelque part, j'ai donc besoin d'un local "web service" pour commencer à fonctionner sur http://localhost:9090/foo/bar pour mes tests.

Je veux que mes tests unitaires pour être autonome, semblable à des tests de Printemps contrôleurs avec le Spring MVC framework de Test.

Certains pseudo-code pour un simple client, de récupérer les numéros à partir de l'API à distance:

//Initialization logic involving setting up mocking of remote API at 
//http://localhost:9090/foo/bar

@Autowired
NumberClient numberClient //calls the API at http://localhost:9090/foo/bar

@Test
public void getNumber42() {
    onRequest(mockAPI.get("/foo/bar/42")).thenRespond("{ \"number\" : 42 }");
    assertEquals(42, numberClient.getNumber(42));
}

//..

Quelles sont mes solutions de rechange à l'aide de Printemps?

Avez-vous de tirer parti de la DTO modèle?
Voulez-vous dire si j'ai marshall et de JSON dans le domaine des objets dans mon client?
Plus précisément, si vous maréchal/unmarshal intermédiaire des objets représentant votre domaine entités dans le réseau
Non, je n'ai pas des objets intermédiaires, seuls les objets du domaine et JSON texte.
Alors je vous recommande de commencer à utiliser le pattern DTO et procéder de la même manière que pour le test des contrôleurs MVC.

OriginalL'auteur | 2014-08-29