Diferencia entre revisiones de «Mock de un WS mediante Spring WS»
(→Ejemplo) |
|||
Línea 60: | Línea 60: | ||
} | } | ||
+ | </code> | ||
+ | |||
+ | Dentro de los archivos de configuración que levante Spring, tendremos que configurarle los siguientes beans: | ||
+ | |||
+ | <code xml> | ||
+ | <bean id="wsTemplate" class="org.springframework.ws.client.core.WebServiceTemplate"> | ||
+ | <!-- Url donde esta expuesto nuestro WS. En este test no irá a invocarlo, ya que se simula el entorno localmente --> | ||
+ | <property name="defaultUri" value="http://localhost:8080/" /> | ||
+ | <property name="marshaller" ref="marshaller" /> | ||
+ | <property name="unmarshaller" ref="marshaller" /> | ||
+ | </bean> | ||
+ | |||
+ | <bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> | ||
+ | <property name="classesToBeBound"> | ||
+ | <list> | ||
+ | <!-- Listado de clases con las que esta mapeado cada Request y Response --> | ||
+ | <value>com.dosideas.ejemplo.schemas.ClienteRequest</value> | ||
+ | <value>com.dosideas.ejemplo.schemas.ClienteResponse</value> | ||
+ | </list> | ||
+ | </property> | ||
+ | </bean> | ||
</code> | </code> | ||
====Fuente==== | ====Fuente==== | ||
*[http://static.springsource.org/spring-ws/site/reference/html/client.html Spring MVC Test ] | *[http://static.springsource.org/spring-ws/site/reference/html/client.html Spring MVC Test ] |
Revisión del 17:27 29 mar 2012
Contenido
Introducción
En esta página explicaremos de qué forma podemos simular el entorno de un WS en memoria, de modo tal de poder realizar un test de componentes contra dicho entorno.
Requerimientos
Para mockear un WS mediante Spring WS, necesitaremos agregar a nuestro proyecto los siguientes jars:
- jaxb-api-2.0.jar
- jaxb-impl-2.0.3.jar
- xalan-2.7.1.jar (importante que sea esta versión o superior)
- xmlunit-1.1.jar
Ejemplo
Básicamente, el código para crear un test contra dicho entorno será como el siguiente:
@RunWith(SpringJUnit4ClassRunner.class)
// indicamos a Spring que levante los archivos de configuración que veremos más adelante @ContextConfiguration("spring-configuration.xml") public class ClienteIntegracionTest {
// Creamos el request a enviarle al WS private String request = "<ns2:UserProfileCreateRequest xmlns:ns2='http://shekhar.com/usermanagement/schemas'> Shekhar Gulati 27 ";
// Creamos el response que nos responderá el WS private String response = "<ns2:UserProfileCreateResponse xmlns:ns2='http://shekhar.com/usermanagement/schemas'> user created successfully ";
//Inyectamos el WebServiceTemplate @Autowired private WebServiceTemplate webServiceTemplate;
// Mockeamos el WebServiceServer private MockWebServiceServer server;
// Clase nuestra que lo consumirá @Autowired private Cliente cliente;
// En el Before levantamos el server pasandole como parámetro al constructor // el webServiceTemplate @Before public void setup() { server = MockWebServiceServer.createServer(webServiceTemplate); }
@Test public void testInvocacionWs() {
// Le damos comportamiento a nuestro WS con el request y el response // antes configurado server.expect(RequestMatchers.payload(new StringSource(request))).andRespond(ResponseCreators.withPayload(new StringSource(response)));
cliente.invocarMetodoQueLlamaAlWs();
// Nos aseguramos que el servicio fue invocado server.verify(); }
}
Dentro de los archivos de configuración que levante Spring, tendremos que configurarle los siguientes beans:
<bean id="wsTemplate" class="org.springframework.ws.client.core.WebServiceTemplate"> <property name="defaultUri" value="http://localhost:8080/" /> <property name="marshaller" ref="marshaller" /> <property name="unmarshaller" ref="marshaller" /> </bean>
<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> <property name="classesToBeBound"> <list> <value>com.dosideas.ejemplo.schemas.ClienteRequest</value> <value>com.dosideas.ejemplo.schemas.ClienteResponse</value> </list> </property> </bean>