net .net wcf unit-testing mocking

.net - net - ¿Una manera fácil de burlarse de un servicio WCF?



wcf service host (2)

Puede utilizar cualquier marco de burla como RhinoMocks o NMock, para burlar el contrato de interfaz, por lo que si su servicio implementó IMyService, entonces podría utilizar un marco de burla para establecer expectativas sobre las llamadas a métodos en esa interfaz. Si no está familiarizado con este concepto, puede simplemente crear un objeto suplente que implemente IMyService pero simule ser el servicio real durante su prueba. De esta forma, cuando se invocan los métodos, se llaman a su objeto de reserva y puede hacer que su suplente devuelva lo que quiera.

Tengo una aplicación que está usando un servicio WCF. Ahora me gustaría agregar pruebas unitarias a la aplicación.

En algunos casos, necesito burlarme del servicio WCF, ya que a veces obtener el comportamiento deseado del servicio es difícil (por ejemplo, el servicio arroja excepciones especiales).

Podría agregar otra interfaz al cliente wcf, pero parece un poco tonto, ya que las llamadas de los clientes ya están usando una interfaz.

¿Hay alguna manera fácil de burlarse de un servicio WCF? ¿Es más fácil que crear otra capa de interfaz y redirigir cada llamada WCF dentro de ella?

Editar: La mayoría de las respuestas parecen no saber mucho sobre el uso del servicio WCF, por lo que algunas aclaraciones:
Para usar un servicio WCF desde un ViewModel, tengo que administrar la conexión de la siguiente manera:

ChannelFactory<IMyWcfService> channelFactory = new ChannelFactory<IMyWcfService>(""); IMyWcfService proxy = channelFactory.CreateChannel(); proxy.CallMyStuff(); proxy.Close();

No puedo simplemente pasar el ViewModel del proxy al WCF, ya que la conexión debe abrirse y cerrarse para cada transacción. Por esta razón, el uso de RhinoMock / NMock no funcionaría, ya que necesitan un ViewModel que obtenga el proxy como parámetro, lo que no se puede hacer así si usa WCF.


¿Por qué no puedes usar algo como NMock2 para burlar las interfaces IMyWcfService directamente?

Si necesita poder crear nuevas instancias sobre la marcha, utilice Factory para ocultar ChannelFactory<IMyWcfService> del cliente. De esta manera puede reemplazar la fábrica, proporcionando al cliente uno que crea burlas en lugar de servidores proxy reales.