Diferencia entre revisiones de «Mock REST con Spring»
(→Ver también) |
|||
(No se muestra una edición intermedia del mismo usuario) | |||
Línea 22: | Línea 22: | ||
=====En la clase de Test===== | =====En la clase de Test===== | ||
− | ====== | + | ======Imports====== |
import org.springframework.test.web.client.MockRestServiceServer; | import org.springframework.test.web.client.MockRestServiceServer; | ||
import org.springframework.test.web.client.RequestMatchers; | import org.springframework.test.web.client.RequestMatchers; | ||
Línea 62: | Línea 62: | ||
== Ver también == | == Ver también == | ||
* [http://static.springsource.org/spring-social/docs/1.0.x/api/org/springframework/social/test/client/MockRestServiceServer.html API Oficial] | * [http://static.springsource.org/spring-social/docs/1.0.x/api/org/springframework/social/test/client/MockRestServiceServer.html API Oficial] | ||
+ | |||
+ | * [http://static.springsource.org/spring/docs/3.2.0.BUILD-SNAPSHOT/api/org/springframework/test/web/mock/client/MockRestServiceServer.html API de la versión incluida en el core de Spring como Snapshot, con algunos ejemplos] |
Revisión actual del 15:55 23 oct 2012
Contenido
Usando MockRestServiceServer para testear un cliente Rest en componente
Situación
Capa de acceso a datos que interactúa como cliente de un servicio REST.
Necesidad
Construir tests de componente del DAO, que queden auto-contenidos.
Para resolver este problema, recurrimos a la clase MockRestServiceServer, incluida en los jars de spring social (y también en el core de Spring a partir de las últimas versiones). Para poder utilizar una instancia de esta clase, se debe crear a partir de una instancia de la clase RestTemplate. Dicho elemento debe ser declarado en el archivo xml de configuración de contexto de nuestros tests.
Archivo de contexto
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> <constructor-arg ref="httpClientFactory"/> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/> </list> </property> </bean>
En la clase de Test
Imports
import org.springframework.test.web.client.MockRestServiceServer; import org.springframework.test.web.client.RequestMatchers; import org.springframework.test.web.client.ResponseActions; import org.springframework.test.web.client.ResponseCreators; import org.springframework.test.web.server.MockMvc; import static org.springframework.test.web.server.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.server.result.MockMvcResultMatchers.status; import org.springframework.test.web.server.setup.MockMvcBuilders; import org.springframework.web.client.RestTemplate;
Declaración de las variables
@Autowired private RestTemplate restTemplate; private MockRestServiceServer mockServer;
Preparación de cada uno de los test
@Before public void setUp() { mockMvc = MockMvcBuilders.standaloneSetup(instanciaDeClaseATestear).build(); mockServer = MockRestServiceServer.createServer(restTemplate); }
En los tests propiamente dichos, preparar las peticiones esperadas y sus respectivas respuestas:
ResponseActions responseAction = mockServer .expect(RequestMatchers.requestTo("http://miURL:puerto/recurso")); responseAction .andExpect(RequestMatchers.header("Accept", "application/json")) .andRespond(ResponseCreators.withStatus(HttpStatus.BAD_REQUEST));
Por ejemplo, en el caso anterior, se espera que cuando sea llamada la URL "http://miURL:puerto/recurso" se responda con un 404.
A partir de este punto, ya se pueden ejercitar los métodos de nuestras clases que invoquen a los servicios REST con las URL configuradas.
Aclaración: en el caso que querramos esperar varias peticiones, las mismas tienen que ser declaradas en el orden en el que serán invocadas.