2009-03-16 11 views
5

Estoy tratando de simular el IUnityContainer con Moq 3.0¿Cómo se burla de IUnityContainer?

Recibo una excepción BadImageFormatException, pero no cuando se depura. Por lo que parece, no soy el único que ha tenido este problema.

here

Y es un problema registrado para Moq

here

tengo curiosidad si alguien ha encontrado una solución ... más cerca que he encontrado es una buena solución que utiliza RhinoMock por Roy Osherove

here

pero me gusta mucho ¡Moq! Así que realmente no quiero tener que cambiar a Rhino Mock pero lo haré si debo

¡Gracias de antemano!

+0

Estoy teniendo el mismo problema. Por favor, avíseme si encontró una solución a esto. – toxvaerd

+0

Entonces, ¿todavía no hay ninguna solución? He encontrado el mismo problema con 3.1 Moq en 3.5sp1. – Shrike

Respuesta

4

No es así.

La única razón para burlarse del contenedor es si lo está pasando. Eso es un antipatrón.

En su lugar, desea componer todo el gráfico de objetos en el punto de entrada de la aplicación, o Composition Root.

Si necesita crear instancias sobre la marcha, use Automatic Factories.

Para sus pruebas, puede construir el objeto bajo prueba y pasar objetos falsos al constructor o crear un nuevo contenedor en la prueba y registrar objetos simulados con él.

+1

De acuerdo, hice esta pregunta cuando era joven y nieve ... También estaba usando contenedores IoC mal. –

1

¿Necesita un objeto simulado en toda regla? ¿Podrías salir adelante simplemente implementando un Fake? Es decir, ¿implementar una instancia de prueba de la interfaz IUnityContainer y anular el método con el que necesita interactuar?

He caído en la trampa más de una vez al pensar que, como tengo una biblioteca de objetos simulados, debería usarla para aislar todas las dependencias de mi sistema. A menudo, hacer algo más simple me da los resultados que quiero con niveles de frustración mucho más bajos.

+0

¿Por qué se ha votado este comentario? Aquellos que votaron por abajo se preocupan por dejar una nota para que otros que la siguen puedan aprender mejor de SO. – Raj

+0

De hecho. Subí la compensación. La creación de un código auxiliar resolvería el problema evitándolo por completo (no se necesita el uso de Moq). Es una solución legítima y para aquellos que votaron por esto, los animo a compartir por qué para el resto de la clase. –

+0

¿Quizás a Stackoverflowers no le gustan las personas con certificaciones? :) –

0

Debido a este problema no me burlo de IUnityContainer, utilizo una instancia real de UnityContainer en su lugar. No es ideal, pero puedo probar el registro comprobando que el contenedor puede resolver los tipos según corresponda.

Puede simular y usar IServiceLocator cuando lo está utilizando para resolver tipos en sus clases, o mejor aún, use registrar una fábrica con el contenedor y usar eso en su lugar.

1

¿Ha intentado burlarse de UnityBaseContainer o UnityContainer en lugar de IUnityContainer, ala this post de Rory Primrose? Él está lidiando con RhinoMocks, pero como creo que el problema está relacionado con el uso interno de Moq de Castle, es posible que puedas resolver el problema de esta manera.

0

¿Está ejecutando esto en Win x64? Eche un vistazo a este page. Sugiere claramente.

Esta excepción se produce cuando el formato de archivo de una biblioteca de vínculos dinámicos (.dll) o un archivo ejecutable (.exe) no se ajusta al formato que se espera por el tiempo de ejecución de lenguaje común.

Asimismo, se encuentra esta entrada de blog que sugiere cambiar la bandera de compilación de cualquiera de las CPU x86 podría ayudar a la causa. http://filips.net/archives/2008/01/17/getting-badimageformatexception-in-64-bit-windows/

Editar:

también echar un vistazo a la rosca, para this. Eche un vistazo dentro de Build Configuration Manager también.

Cuestiones relacionadas