Diferencia entre revisiones de «Mock de un web service con Jetty»
De Dos Ideas.
| (No se muestra una edición intermedia del mismo usuario) | |||
| Línea 92: | Línea 92: | ||
</code> | </code> | ||
| − | == El test con JUnit == | + | == El test con JUnit == |
| − | El siguiente test utiliza la clase anterior para maquetar el [[Web Service]]. | + | El siguiente test utiliza la clase anterior para maquetar el [[Web Service]]. |
<code java="java"> | <code java="java"> | ||
| − | blah | + | public class UnTest extends TestCase { |
| + | |||
| + | //Referencia al mock del web serivce | ||
| + | private WebServiceServerMock webServiceServerMock; | ||
| + | |||
| + | public void setUp() throws Throwable { | ||
| + | //Crea un WebServiceServerMock que escuchará peticiones en el | ||
| + | //puerto 7777 | ||
| + | webServiceServerMock = WebServiceServerMock.crear(7777); | ||
| + | } | ||
| + | |||
| + | |||
| + | public void test() { | ||
| + | //Se programa la respuesta que entregará el web service frente a una | ||
| + | //petición. | ||
| + | //La respuesta se pasa en forma de xml según el WSDL deifinido simulando | ||
| + | //una respuesta real según lo que se necesite testear. | ||
| + | //Es posible también configurar diferentes respuestas del protocolo de HTTP. | ||
| + | webServiceServerMock.crearOperacion(xmlRespuesta, HttpServletResponse.SC_OK); | ||
| + | |||
| + | //Se ejercita la instancia que realizará la petición al server | ||
| + | instance.blah(); | ||
| + | |||
| + | //Luego es posible pedirle al mock el request con el que se invocó | ||
| + | //el servicio, sobre el que se podrá realizar verificaciones. | ||
| + | Envelope envelope = webServiceServerMock.getRequestEnvelope(); | ||
| + | |||
| + | } | ||
| + | |||
| + | |||
| + | public void tearDown() throws Exception { | ||
| + | //Una vez terminado el test, se detiene el servicio | ||
| + | webServiceServerMock.stop(); | ||
| + | } | ||
| + | |||
| + | } | ||
</code> | </code> | ||
| − | |||
== Ver también == | == Ver también == | ||
Revisión actual del 18:51 27 oct 2009
El siguiente ejemplo de código muestra como crear una clase utilitaria que se encarga de simular un Web Service usando Jetty para atender las peticiones.
package com.dosideas.test;
import java.io.BufferedReader; import java.io.IOException;
import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
import org.mortbay.jetty.Handler; import org.mortbay.jetty.Request; import org.mortbay.jetty.Server; import org.mortbay.jetty.handler.AbstractHandler;
import com.thoughtworks.xstream.XStream;
public class WebServiceServerMock {
private Server server;
private Envelope envelope;
private WebServiceServerMock() {
}
public static WebServiceServerMock crear(int port) throws Exception {
WebServiceServerMock mock = new WebServiceServerMock();
mock.server = new Server(port);
mock.server.start();
return mock;
}
public Envelope getRequestEnvelope() {
return envelope;
}
public void crearOperacion(final String xmlRespuesta, final int httpStatus) {
Handler handler = new AbstractHandler() {
public void handle(
String target,
HttpServletRequest request,
HttpServletResponse response,
int dispatch
) throws IOException, ServletException {
BufferedReader in = new BufferedReader(request.getReader());
String line = "";
String xml = "";
while (null != (line = in.readLine())) {
xml += line;
}
envelope = envelopeFromXml(xml);
response.setStatus(httpStatus);
response.getWriter().print(xmlRespuesta);
((Request) request).setHandled(true);
}
};
server.setHandler(handler);
}
public static Envelope envelopeFromXml(String xml) {
XStream xStream = new XStream();
xStream.alias("soapenv:Envelope", Envelope.class);
xStream.alias("soapenv:Body", Body.class);
xStream.aliasField("soapenv:Body", Envelope.class, "body");
//el resto de los mapeos
Envelope envelope = (Envelope) xStream.fromXML(xml);
return envelope;
}
public static class Body {
public ConsultarListasDisponiblesRequest consultarListasDisponiblesRequest;
}
public static class Envelope {
public Body body;
}
public void stop() throws Exception {
server.stop();
}
}
El test con JUnit
El siguiente test utiliza la clase anterior para maquetar el Web Service.
public class UnTest extends TestCase {
//Referencia al mock del web serivce private WebServiceServerMock webServiceServerMock;
public void setUp() throws Throwable {
//Crea un WebServiceServerMock que escuchará peticiones en el
//puerto 7777
webServiceServerMock = WebServiceServerMock.crear(7777);
}
public void test() {
//Se programa la respuesta que entregará el web service frente a una
//petición.
//La respuesta se pasa en forma de xml según el WSDL deifinido simulando
//una respuesta real según lo que se necesite testear.
//Es posible también configurar diferentes respuestas del protocolo de HTTP.
webServiceServerMock.crearOperacion(xmlRespuesta, HttpServletResponse.SC_OK);
//Se ejercita la instancia que realizará la petición al server
instance.blah();
//Luego es posible pedirle al mock el request con el que se invocó
//el servicio, sobre el que se podrá realizar verificaciones.
Envelope envelope = webServiceServerMock.getRequestEnvelope();
}
public void tearDown() throws Exception {
//Una vez terminado el test, se detiene el servicio
webServiceServerMock.stop();
}
}