Diferencia entre revisiones de «Mock REST con Spring»
(→Archivo de contexto) |
|||
Línea 58: | Línea 58: | ||
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. | 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. | 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. | ||
+ | |||
+ | |||
+ | == Ver también == | ||
+ | * [http://static.springsource.org/spring-social/docs/1.0.x/api/org/springframework/social/test/client/MockRestServiceServer.html API Oficial] |
Revisión del 15:51 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.