java - luggage - samsonite outlet
La mejor forma de burlarse del servicio web de Java (3)
Tengo que burlarme del servicio web de Java bastante complicado y estoy buscando la solución adecuada. Una forma de hacerlo sería usar la interfaz de usuario de Soap, pero necesito algo que pueda modificar el estado del servidor, es decir. una solicitud afectaría solicitudes futuras.
En este caso particular, podría hacerse rápidamente guardando objetos serializados en el disco y, a veces, generando respuestas asíncronas al servicio web del cliente de origen.
Esos dos requisitos me impiden usar SoapUI; la lógica groovy se volvería bastante complicada y probablemente difícil de mantener.
Mis preguntas:
1) ¿Hay alguna otra ventaja de SoapUI en este contexto (por ejemplo, migración fácil a la nueva versión de wsdl) sobre la implementación personalizada de Java Mock?
2) ¿Cuál sería la forma más adecuada de generar el servicio web desde wsdl y aún así ser capaz de conectarlo con alguna funcionalidad personalizada, es decir. adjuntando algunos ganchos que se podrían editar en archivos separados (para facilitar la regeneración del código ws a partir de wsdl actualizado)?
Deberías mirar EasyMock , que permite construir simulaciones programáticamente. Es posible especificar comportamientos muy complejos para tus simulacros.
Para los simulacros simples, uso soapUI, mientras que para los más complicados, cuando el estado debe cambiar entre las solicitudes, uso el emulador de servicio web simple escrito en Python. Dicho emulador utiliza plantillas de respuesta creadas a partir del servicio web real o las respuestas que creé en soapUI. De esta forma puedo controlar toda la lógica.
Emulator para mi último proyecto tiene más de 300 líneas de código Python, pero para el anterior, mucho más simple, era ~ 150 líneas de código Python.
Presumiblemente, ¿está utilizando algún tipo de trozo generado en su cliente? Debería burlarse del stub con una de las API de burla (JMock o EasyMock) e inyectar el simulacro en la clase bajo prueba.
En el lado del servidor, prueba esa clase que maneja la llamada, inyectando simulaciones de cualquier objeto que pueda usar para hacer su trabajo.
Como comentario, debe esforzarse por mantener todas las llamadas en una prueba local (en proceso). Facilita el control de los valores de devolución de cualquier objeto del que dependa la clase bajo prueba y cuando el banco de pruebas crezca, ayudará a evitar que las pruebas unitarias se conviertan en un cuello de botella en su proceso de construcción.
Con respecto a la generación de una clase Java (es) de WSDL Apache Axis tiene algo llamado WSDL2Java, que genera los stubs del cliente que mencioné anteriormente. Este tipo de utilidad es común en los marcos de servicios web, pero puede haber sido reemplazado ahora desde que los servicios web EJB3 introdujeron javax.xml.rpc.ServiceFactory
.
Hay un tutorial sobre servicios web EJB3 y clientes aquí ( http://www.theregister.co.uk/2007/01/23/ejb_web_services/ ).