2011-02-08 23 views
5

He estado desarrollando un proyecto WCF que expondrá servicios web (basados ​​en HTTP) que serán consumidos por clientes externos a la empresa. Estoy planeando usar TFS 2010 para integración continua.¿Cómo hacer las pruebas de integración para un proyecto WCF?

Quiero hacer pruebas continuas de integración e integración.

mi pregunta es:

-¿Eso haciendo pruebas de integración significa que tengo que crear un entorno de prueba que simula el entorno de producción? -O ¿significa que simplemente tengo que comenzar a llamar a mi WCF, base de datos y otros objetos desde la herramienta de prueba de mi unidad sin depender de los simulacros? por ejemplo:

[TestClass] 
public class ServiceIntegrationTest 
{ 
    private static ServiceHost serviceHost; 

    [ClassInitialize] 
    public static void MyClassInitialize(TestContext testContext) 
    { 
     serviceHost = new ServiceHost(typeof(Service1), new [] { new Uri("http://127.0.0.1:8001/") }); 
     serviceHost.AddServiceEndpoint(typeof(IService1), new BasicHttpBinding(), "Service1"); 
     serviceHost.Open(); 
    } 

-Realmente no entiendo cómo llevar esto a cabo. - ¿Hay algún tutorial con proyectos .NET (WCF) del mundo real sobre cómo llevarlo a cabo?

Respuesta

2

No soy un experto en cómo analizar las pruebas unitarias correctamente con los simulacros y el resto, pero puedo compartir mi experiencia en la realización de pruebas de integración con el backend de bases de datos WCF/a.

Básicamente, usamos un singleton para manejar todo el código de inicio. En otras palabras, el método MyClassInitialize llamaría a un método estático que garantizaría que el servidor/base de datos del servicio estuviera en funcionamiento. De esta forma, no tuvimos que configurar/deshacer el back-end para cada conjunto de pruebas unitarias.

[ClassInitialize] 
public static void MyClassInitialize(TestContext testContext) 
{ 
    GlobalBackend.EnsureStarted(); 
} 

No sé de ningún ejemplo en línea, es probable que tenga que hacer un poco más buscando en Google para eso.

En cuanto a la granularidad para escribir sus pruebas, habló sobre las pruebas de integración. Parece que probablemente quiera probar sus llamadas de servicio asociadas a una base de datos real. Supongamos que tiene incorporada alguna funcionalidad CRUD en sus servicios, una prueba unitaria (prueba de integración en este contexto) puede crear un widget (o lo que sea), luego realice una llamada loadWidget para asegurarse de que el widget se creó correctamente.

Cuántas pruebas realizar dentro de una unidad de prueba (dependiendo de si está realizando pruebas de integración o pruebas de unidades más granulares) es un tema que podría llenar muchos libros.

EDIT: También podría ser necesario hacer algo de limpieza/cierre de las bases de datos/servicios:

MSDN página en AssemblyCleanup attribute.

[AssemblyCleanup()] 
public static void AssemblyCleanup() 
{ 
    GlobalBackend.ShutDown(); 
} 

Por supuesto, que puede conducir a limitarse a poner todo su código de inicio en:

[AssemblyInitialize()] 
public static void AssemblyInit(TestContext context) 
{ 
     GlobalBackend.EnsureStarted(); 
} 

Así que ahora estoy recordando con mayor claridad - que terminamos haciendo esto al final (menos código)

+0

wow. gracias por esta elaborada respuesta. – Attilah

Cuestiones relacionadas