2008-09-30 28 views

Respuesta

26

Como dice aku, si está probando los métodos de servicio (es decir, el comportamiento del código), puede probar la unidad directamente y eludir la infraestructura de WCF. Por supuesto, si su código depende de las clases de contexto de WCF (como OperationContext), entonces sugiero introducir wrappers como ASP.NET MVC para HttpContext.

Para probar la conectividad, dependerá del tipo de puntos finales que haya configurado. En algunos casos, puede autoevaluar su servicio WCF dentro de la prueba unitaria (como lo haría con un Servicio WCF de Windows) y probarlo.

Sin embargo, es posible que deba activar el Servidor web de desarrollo ASP.NET o incluso IIS si desea probar el comportamiento WCF específico para esos entornos de alojamiento (es decir, SSL, métodos de autenticación). Esto se pone complicado y puede comenzar a exigir la configuración de la máquina de desarrollo de todos y los servidores de compilación, pero es factible.

+2

¿Conoces un tutorial sobre cómo usar MVC3 como envoltorio para pruebas unitarias? –

+0

[Aquí hay] (https://weblogs.asp.net/cibrax/unit-tests-for-wcf) un ejemplo concreto de burla de OperationContext. – user3613932

11

¿Qué es exactamente lo que quiere probar? Conectividad o métodos de servicio?

Lo bueno de WCF es que solo puede definir interfaces (err, contratos) y probarlas como código normal. Entonces puede suponer que funcionarán a través de cualquier tipo de conexión compatible con WCF.

La conectividad se puede probar alojando su servicio directamente en UT o en el servidor web de desarrollo.

cuanto a las herramientas, que hay un montón de marcos de pruebas unitarias: NUnit, las pruebas incorporadas en Visual Studio, xUnit, etc, etc.

Puede descargar "Visual Studio 2008 and .NET Framework 3.5 Training Kit" y ".NET Framework 3.5 Enhancements Training Kit" Si recuerdo correctamente había muestras para las pruebas de unidad WCF

5

Si uno realmente quiere probar los servicios de WCF, es mejor ir con las pruebas de integración que realmente ejercen la conectividad entre el cliente y el servidor.

2

Puede usar Typemock Isolator para hacer eso. Aquí hay un par de publicaciones sobre el tema de probar el client side y el server side. Puede hacerlo sin ninguna dependencia, incluido un archivo de configuración.

Gil Zilberfeld Typemock

4

Si desea probar el servicio real de funcionamiento a continuación SoapUI es gratuito y tiene algunas características excelentes. La única advertencia es que solo lo he intentado con el enlace HTTP básico.

0

He visto SOA Test utilizado para evaluar las pruebas de rendimiento y escalabilidad de los servicios de WCF, si esto es lo que busca. No tengo información sobre el costo o la lentitud.

En nuestro caso, capturamos los mensajes de nuestra IU para realizar pruebas automatizadas.

2

Typemock aislador es una herramienta para las pruebas unitarias wcf services, amoung otras cosas ...

22

creo que el mejor enfoque es poner a prueba todas las preocupaciones por separado; conectividad de prueba, llamadas de lib cliente (proxies) y método de servicio. La burla y la inyección de dependencia es una buena forma de probar la conectividad y el comportamiento del servicio de forma independiente, pero dudo que pueda evitar las pruebas de punto final dependientes del middleware.

Puede crear un host de servicio en su prueba (autohospedado) y cargar su servicio. Una vez que configure sus puntos finales, puede conectarse utilizando los servidores proxy de su cliente. Esto debería funcionar con HTTP simple y WSHTTP. En su prueba de unidad necesita crear una referencia de servicio a su servicio. Luego puede crear un host y conectar su cliente con el host de prueba juntos. Intentaría evitar cualquier prueba con el "host de servicio WCF" alias WcfSvcHost. (Menciono esto solo porque algunas personas hacen referencia a las utilidades de Visual Studio, que funcionarán solo si solo ejecuta pruebas desde su IDE)

Si necesita verificar escenarios de autenticación exóticos o puntos finales que usan middleware especial, necesitará para crear pruebas usando el middleware. Para comprobaciones simples de cordura, etc. es suficiente el uso de alojamiento propio. Las pruebas dependientes de Middleware pueden causar problemas de implementación de prueba si está utilizando un servidor de compilación.

Por puntos finales dependientes de middleware me refiero a puntos finales que usan, por ejemplo, MOM (MSMQ, RabbitMQ, etc.) o protocolos realmente exóticos, etc. Probando los proxys de cliente con un simulacro auto-alojado y probando los extremos exóticos por separado es el camino a seguir.

Si desea utilizar la inyección de dependencia, existen unos marcos bastante sofisticados que proporcionan características de "abstracción del servicio" que le permiten inyectar servicios simulados, etc. Utilicé Spring.NET con WCF varias veces. Castle Windsor tiene instalaciones WCF también.

ejemplo de prueba auto-organizada:

ServiceHost serviceHost = null; 

    try 
    { 
     var baseAddress = new Uri("http://localhost:8000/TestService"); 
     serviceHost = new ServiceHost(typeof (ServiceClass), baseAddress); 
     Binding binding = new WSHttpBinding(); 
     var address = new EndpointAddress("http://localhost:8000/TestService/MyService"); 
     var endpoint = serviceHost 
      .AddServiceEndpoint(typeof (IServiceContract), binding, address.Uri); 

     var smb = new ServiceMetadataBehavior {HttpGetEnabled = true}; 
     serviceHost.Description.Behaviors.Add(smb); 

     using (var client = new ProxyClient(endpoint.Name, endpoint.Address)) 
     { 
      endpoint.Name = client.Endpoint.Name; 

      serviceHost.Open(); 

      // ... magic happens 
     } 

     serviceHost.Close(); 
    } 
    catch (Exception ex) 
    { 
     // ... tests 
    } 
    finally 
    { 
     if (serviceHost != null) 
     { 
      ((IDisposable) serviceHost).Dispose(); 
     } 
    } 

me gustaría señalar que las herramientas de pruebas funcionales no son las mismas que las herramientas de pruebas unitarias. Las pruebas unitarias deben consistir en dividir su prueba en un conjunto de pruebas independientes, mientras que las pruebas funcionales se refieren principalmente a probar los flujos de trabajo de principio a fin.

+3

¿A qué espacio de nombres/referencia pertenece ProxyClient? –

Cuestiones relacionadas