Diferencia entre revisiones de «Mock de un WS mediante Spring WS»

De Dos Ideas.
Saltar a: navegación, buscar
Línea 17: Línea 17:
 
<code java>
 
<code java>
 
@RunWith(SpringJUnit4ClassRunner.class)
 
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("profile-service-client.xml")
 
public class ProfileServiceClientIntegrationTest {
 
  
 +
// 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 ";
 
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 ";
 
private String response = "<ns2:UserProfileCreateResponse xmlns:ns2='http://shekhar.com/usermanagement/schemas'> user created successfully ";
  
 +
//Inyectamos el WebServiceTemplate
 
@Autowired
 
@Autowired
 
private WebServiceTemplate webServiceTemplate;
 
private WebServiceTemplate webServiceTemplate;
 +
 +
// Mockeamos el WebServiceServer
 
private MockWebServiceServer server;
 
private MockWebServiceServer server;
 +
 +
// Clase nuestra que lo consumirá
 
@Autowired
 
@Autowired
private ProfileServiceClient client;
+
private Cliente cliente;
  
 +
// En el Before levantamos el server pasandole como parámetro al constructor
 +
// el webServiceTemplate
 
@Before
 
@Before
 
public void setup() {
 
public void setup() {
server = MockWebServiceServer.createServer(webServiceTemplate);//1
+
server = MockWebServiceServer.createServer(webServiceTemplate);
 
}
 
}
  
 
@Test
 
@Test
public void testInvokeProfileServiceAndGetASuccessResponse() {
+
public void testInvocacionWs() {
server.expect(RequestMatchers.payload(new StringSource(request))).andRespond(ResponseCreators.withPayload(new StringSource(response)));//2
+
 
Assert.assertEquals("user created successfully",client.invokeProfileServiceAndGetASuccessResponse());//3
+
// Le damos comportamiento a nuestro WS con el request y el response
server.verify();//4
+
// 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();
 
}
 
}
  
Línea 44: Línea 62:
 
</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:23 29 mar 2012

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(); }

}

Fuente