¿Hay alguna forma de burlarse de un proxy de cliente WCF utilizando el framework de simulaciones de Rhino para que tenga acceso a la propiedad Channel? Estoy intentando probar el método Proxy.Close() pero como el proxy se construye utilizando la clase base abstracta ClientBase<T>
que tiene la interfaz ICommunicationObject
, la prueba de mi unidad está fallando ya que la infraestructura interna de la clase está ausente en el objeto simulado. Cualquier buena forma con muestras de código sería muy apreciada.La mejor forma de burlarse del proxy WCF Cliente
10
A
Respuesta
20
Lo que podría hacer es crear una interfaz que herede de la interfaz de servicio original y ICommunicationObject
. A continuación, podría vincularse y burlarse de esa interfaz y seguir teniendo todos los métodos importantes.
Por ejemplo:
public interface IMyProxy : IMyService, ICommunicationObject
{
// Note that IMyProxy doesn't implement IDisposable. This is because
// you should almost never actually put a proxy in a using block,
// since there are many cases where the proxy can throw in the Dispose()
// method, which could swallow exceptions if Dispose() is called in the
// context of an exception bubbling up.
// This is a general "bug" in WCF that drives me crazy sometimes.
}
public class MyProxy : ClientBase<IMyService>, IMyProxy
{
// proxy code
}
public class MyProxyFactory
{
public virtual IMyProxy CreateProxy()
{
// build a proxy, return it cast as an IMyProxy.
// I'm ignoring all of ClientBase's constructors here
// to demonstrate how you should return the proxy
// after it's created. Your code here will vary according
// to your software structure and needs.
// also note that CreateProxy() is virtual. This is so that
// MyProxyFactory can be mocked and the mock can override
// CreateProxy. Alternatively, extract an IMyProxyFactory
// interface and mock that.
return new MyProxy();
}
}
public class MyClass
{
public MyProxyFactory ProxyFactory {get;set;}
public void CallProxy()
{
IMyProxy proxy = ProxyFactory.CreateProxy();
proxy.MyServiceCall();
proxy.Close();
}
}
// in your tests; been a while since I used Rhino
// (I use moq now) but IIRC...:
var mocks = new MockRepository();
var proxyMock = mocks.DynamicMock<IMyProxy>();
var factoryMock = mocks.DynamicMock<MyProxyFactory>();
Expect.Call(factoryMock.CreateProxy).Return(proxyMock.Instance);
Expect.Call(proxyMock.MyServiceCall());
mocks.ReplayAll();
var testClass = new MyClass();
testClass.ProxyFactory = factoryMock.Instance;
testClass.CallProxy();
mocks.VerifyAll();
Cuestiones relacionadas
- 1. Inicialización de proxy de cliente WCF
- 2. Burlarse de un Wcf ServiceContract
- 3. ¿Deshabilitar proxy web para un cliente WCF?
- 4. La mejor manera de burlarse del servicio web de Java
- 5. WCF: Colección tipo de proxy en el cliente
- 6. Mejor enfoque para el cliente WCF
- 7. ¿Cómo puedo establecer un HTTP Proxy (WebProxy) en un proxy de servicio WCF del lado del cliente?
- 8. Cómo manejar la desconexión del cliente WCF
- 9. Abortar() de proxy de cliente WCF no libera la sesión después de la captura FaultException
- 10. configuración mínima de WCFconfig del cliente WCF
- 11. RhinoMocks: forma correcta de burlarse del getter de propiedad
- 12. La mejor forma de registrar errores en WCF
- 13. ¿Cuándo cerrar el cliente de WCF?
- 14. WCF Servicio web detrás del proxy inverso público
- 15. Instanciación de cliente WCF
- 16. Anular conexiones máximas de Cliente Wcf, evitar la regulación del lado del cliente
- 17. Seguridad WCF utilizando la dirección IP del cliente
- 18. serialización POCO proxy con WCF
- 19. Mejores prácticas para WCF Service Proxy lifetime?
- 20. La mejor forma de validar los valores de los parámetros del método WCF y WebService
- 21. ¿Cableado del almacenamiento en caché del lado del cliente WCF?
- 22. ¿Cuál es la mejor forma de comunicarse entre un servicio WCF y subprocesos separados?
- 23. Manejando la desconexión del cliente en el servicio dúplex WCF
- 24. WCF - tener cheque cliente para la disponibilidad del servicio
- 25. Silverlight WCF Proxy async solamente?
- 26. ¿Cómo desactivar la revocación de certificados para un cliente del servicio WCF?
- 27. Generación de proxy wcf frente a ChannelFactory
- 28. ¿Por qué es lenta la primera llamada de cliente WCF?
- 29. ¿Cuál es la mejor forma de versionar una API web de WCF?
- 30. Problema con el cliente WCF llamando a la operación unidireccional
Ver un artículo [hosting-maqueta-como-servicio WCF] (http://bronumski.blogspot.com.au/2011/09/hosting-mock-as- wcf-service.html) y la respuesta relacionada http://stackoverflow.com/a/10306934/52277 –