Diferencia entre revisiones de «Mock REST con Spring»
(Página creada con '=== 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. ====…') |
(→Archivo de contexto) |
||
Línea 11: | Línea 11: | ||
=====Archivo de contexto===== | =====Archivo de contexto===== | ||
− | <bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> | + | <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> | + | </bean> |
=====En la clase de Test===== | =====En la clase de Test===== |
Revisión del 15:32 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.