2011-02-16 25 views
6

Nos gustaría burlarnos de la clase OperationContext con fines de prueba. Estamos usando 'Mock'. Pero OperationContext es una clase sellada y no se puede burlar. Por lo tanto, estamos intentando crear un objeto ficticio OperationContext. Pero el constructor OperationContext toma IContextChannel como parámetro. Nos gustaría conocer una forma de obtener un IContextChannel para que se pueda pasar al constructor OperationContext.WCF Data Services: Mocking OperationContext

Respuesta

0

El NetFX project contiene varias clases e interfaces de contenedor para permitir este tipo de cosas.

+0

¿Puede proporcionarnos los nombres de las clases contenedoras? No pude ver la documentación en el enlace. –

3

La recomendación general es implement wcf services without referencing wcf.

Ejemplos cómo hacerlo están en http://marcin.floryan.pl/blog/2012/01/do-we-really-need-wcfmock

Hemos sustituido una referencia a OperationContext con una referencia a operationResponse. OperationResponse debe definirse como una interfaz y puede inyectarse en el constructor al igual que el repositorio en el ejemplo dado. Nuestro método de prueba ahora se convierte en ligeramente más corto y más legible.

Y en http://blogs.msdn.com/b/ploeh/archive/2006/12/04/integrationtestingwcfservices.aspx

déjenos, por un momento, considerar la necesidad de realizar la autorización. Usted podría inspeccionar OperationContext.Current directamente en cada una de sus implementaciones de operación , pero eso sería una mezcla de preocupaciones (lógica de negocio implementada en la operación mezclada con autorización). La forma correcta sería proporcionar una clase derivada de ServiceAuthorizationManager, y configurar el servicio para usar esta clase para autorización. Esto le permitiría mantener la unidad de prueba en sus implementaciones de operación, pero obviamente, también necesita probar el administrador de autorizaciones, y resulta que la prueba de integración es la forma más fácil de lograr esta tarea.

Si aún necesita seguir un simulacro de recomendación de http://blogs.msdn.com/b/ploeh/archive/2008/06/28/unit-testing-duplex-wcf-services.aspx

Todo lo que tiene que hacer es reemplazar la llamada toOperationContext.GetCallbackChannel con algo abstracto. En .NET 3.5, la abstracción más fácil es Func, que tiene la misma firma , pero si está en .NET 3.0, siempre puede definir un tipo de delegado similar propio.

alternativa como último recurso se puede utilizar WCFmock

#if DEBUG 
    using WebOperationContext = System.ServiceModel.Web.MockedWebOperationContext; 
#endif 

Esto es útil, por ejemplo, si desea utilizar la versión burlado en desarrollo, y siempre la versión WCF en la producción.Eso es todo, no es necesario tocar su aplicación de servicio existente en absoluto, una vez ha definido ese alias, el servicio está listo para ser probado

De http://blog.gfader.com/2010/08/how-to-unit-test-wcf-service.html

todas sus llamadas a OperationContext .Current.Channel.SessionId get interceptado por MockedOperationContext, pero solo en sus pruebas está burlándose de OperationContext. En su entorno normal, MockedOperationContext actúa como un proxy para el OperationContext real.

Cuestiones relacionadas