web services - paso - Automatice la prueba de comunicación del servicio web
web service java (5)
Tengo una aplicación que envía mensajes a un servicio web externo. Construyo y despliego esta aplicación usando MSBuild y Cruisecontrol.NET . Cuando CCNET crea y despliega la aplicación, también ejecuta un conjunto de pruebas usando NUnit . Ahora me gustaría probar la comunicación del servicio web también.
Mi idea es que, como parte del proceso de compilación, se genere un servicio web (basado en los servicios web externos WSDL) y se implemente en el servidor web local del servidor de compilación. Todo lo que el servicio web debe hacer es recibir el mensaje y colocarlo en el sistema de archivos para que luego pueda verificarlo usando NUnit ordinario, por ejemplo. Esto también facilitaría el desarrollo ya que los nuevos desarrolladores solo tendrían que ejecutar el script de compilación y estar en funcionamiento (no tener que perder tiempo para establecer una conexión con el servicio de terceros).
¿Existen utilidades existentes que simulan fácilmente un servicio web basado en WSDL? ¿Alguien hizo algo similar con MSBuild?
¿Hay otras formas de probar este escenario?
Eche un vistazo a NMock2 . Es un producto de burla de fuente abierta y le permite crear implementaciones "virtuales" para interfaces que admiten una interacción rica y profunda.
Por ejemplo, si su interfaz WS se llama IService
y tiene un método Data GetData()
, puede crear una simulación que requiera que se llame al método una vez y devuelva un nuevo objeto Data
:
var testService = mockery.NewMock<IService>();
Expect
.Once
.On(testService)
.Method("GetService")
.WithNoArguments()
.Will(
Return.Value(new Data());
Al final de la prueba, llame a mockery.VerifyAllExpectationsHaveBeenMet()
para asegurarse de que realmente se llamó al método GetData
.
PD: no confundas el proyecto "NMock2" con el "NMock RC2", que también se llama "nmock2" en sourceforge. NMock2-the-project parece haber reemplazado a NMock.
Acabo de empezar a buscar en http://www.soapui.org/ y parece que funcionará muy bien para probar los servicios web.
Además, tal vez analice agregar una capa de abstracción en su servicio web, cada llamada de servicio llamaría directamente a un método comprobable (fuera del alcance web). Acabo de hacer esto con un proyecto más grande en el que estoy trabajando, y su capacidad de prueba funciona bien.
En general, una muy buena manera de probar cosas como esta es usar objetos simulados .
En el trabajo, utilizamos el producto TypeMock para probar cosas como la comunicación del servicio web y otras dependencias externas. Cuesta dinero, por lo que puede no ser adecuado para sus necesidades, pero creo que es un producto fantástico. Puedo decirte por experiencia personal que se integra muy bien con NUnit y CCNet.
Tiene una sintaxis muy simple en la que básicamente dice "cuando se llama a este método / propiedad, quiero que devuelva este valor". Es ideal para probar cosas como fallas de red, archivos que no están presentes y, por supuesto, servicios web.
Esto también podría ser algo - MockingBird . Parece útil.