2011-03-19 20 views
10

Implementé un servicio WCF de suscripción/publicación (para mi propio placer) que funciona razonablemente bien. Al igual que todos los blogs y libros que he visto, todos usan OperationContext para obtener la dirección de devolución de llamada del cliente. Después de leer un poco, debido a que muchas personas dijeron que no usaran OperationContext, no pude crear las pruebas de unidad adecuadas. Sin embargo, no he podido encontrar una alternativa. Supongo que el método de suscripción podría aceptar un parámetro para que proporcione su propia dirección. Pude ver que el código se puede probar desde el punto de vista de la prueba de integración, pero no para la prueba unitaria ya que OperationContext siempre sería nulo.Creación de servicio WCF comprobable sin OperationContext

¿Cómo obtengo el punto final del cliente cuando se suscriben a mi servicio sin usar OperationContext?

Poco a un lado, pero ¿dónde está un buen recurso de WCF con pruebas en mente al mostrar muestras de código? Hay miles de blogs que reiteran el mismo código sin proporcionar ejemplos de casos de prueba.

Gracias.

Respuesta

7

los desarrolladores de Microsoft realmente como sealed y static palabras clave (así como internal) y odian virtual. Debido a eso, los enfoques de prueba estándar y los marcos de trabajo a menudo no funcionan. Usted tiene dos opciones:

  1. acceso a Wrap OperationContext en clase personalizada y se inyecta una instancia de la clase a su servicio. Esto implicará trabajo adicional porque tendrá que hacer la inyección en algún lugar fuera de su servicio. Por ejemplo, la inyección del constructor necesitará personalizar IInstanceProvider.
  2. Utilice un marco de prueba más potente. Compruebe Moles framework que es capaz de interceptar llamadas y redirigirlas. Esto permite clases selladas "burlonas" y métodos/propiedades estáticos.

Otro enfoque es simplemente la refacturación de su código. Elimine toda la lógica de negocios de su servicio en una clase de negocios independiente que se pueda probar y deje que el servicio participe solo en la prueba de integración. El servicio se parece más a la infraestructura y no todo lo que realmente necesita es una prueba unitaria. La prueba de integración/extremo a extremo/comportamiento también es prueba y enfoque válido.

+0

Nice answer. No es que trate de esconderme del framework de Moles, pero ¿cómo me burlaría de 'OperationContext'? – gcso

+0

Normalmente no se puede burlar 'OperationContext' (a menos que lo ajuste) pero al usar Moles puede redirigir las llamadas a OperationContext a sus propios métodos. Al menos esa es mi comprensión de su trabajo después de leer algunos artículos. –

+0

Si echas un vistazo a http://code.google.com/p/netfx/, tienen todas esas clases de WCF inaccesibles muy bien interconectadas y envueltas para ti. –

Cuestiones relacionadas