2012-03-06 17 views
11

Actualmente estoy evaluando ServiceStack (para crear servicios basados ​​en el descanso en .Net). Una de las áreas de interés es el lado de las pruebas. Mi servicio de descanso tendrá una serie de servicios de aplicaciones inyectados (actualmente usando Autofac). Lo que necesito es un mecanismo para probar la capa de descanso y definir las expectativas en la capa de mi aplicación (a través de MOQ), así que no estoy haciendo pruebas de integración, sino que estoy probando esta capa.Service stack and Mocking, any tutorials?

¿Alguna idea sobre cómo hacer esto?

Respuesta

12

A ServiceStack Service es como cualquier clase de servicio C# normal y se puede burlar de la misma manera que cualquier otra clase. La dependencia mínima para un servicio ServiceStack es la implementación del marcador de interfaz IService libre de dependencia y donde cualquier servicio solo acepta un DTO de solicitud y devuelve cualquier objeto.

Una forma de probar la unidad Los servicios de ServiceStack es usar DirectServiceClient como seen in this example, una ventaja de esto es que le permite usar la misma prueba unitaria como prueba de integración, probando los diferentes extremos XML, JSON, JSV y SOAP .

De lo contrario se puede probar la unidad y se burlan de ella como cualquier otra clase, por ejemplo:

var service = new TestService { 
    MyDependency = new Mock<IMyDependency>().Object 
}; 
var response = service.Get(new Test { Id = 1 }); 
Assert.That(response.Result, Is.EqualTo("Hello, 1")); 
+0

@Thanks. Creo que iremos a la provisión de servicios para nuestro nuevo proyecto. Buen trabajo. –

+2

Cuando me burlo de los servicios de esta manera, los atributos de filtro no parecen activarse, ¿es ese el comportamiento esperado? – Shagglez

+0

Cuando simula el 'IService ' acaba de usar esto para aislar las dependencias. Todos los atributos de filtro dependen de una mayor cantidad de la pila en ejecución (es decir, configuración/configuración/inicialización especificada en su clase AppHost). Si necesita probar el código en los atributos de filtro, entonces las clases de atributos se deben probar de forma independiente. – CodeMonkeyKing