2009-03-16 7 views
5

Sto cercando di deridere IUnityContainer utilizzando Moq 3.0Come prendi in giro IUnityContainer?

Ricevo una eccezione BadImageFormatException, ma non durante il debug. Dal suo aspetto non sono l'unico ad aver incontrato questo problema.

here

e il suo un problema registrato per Moq

here

Sono solo curioso di sapere se qualcuno ha trovato una soluzione ... più vicina che ho trovato è una bella soluzione che utilizza RhinoMock di Roy Osherove

here

ma mi piace molto Moq! Quindi non voglio davvero passare a Rhino Mock ma lo farò se devo

Grazie in anticipo!

+0

Ho lo stesso problema. Per favore fatemi sapere, se avete trovato una soluzione a questo. – toxvaerd

+0

Quindi, non ci sono ancora soluzioni? Ho riscontrato lo stesso problema con 3.1 Moq su 3.5sp1. – Shrike

risposta

4

Non è così.

L'unico motivo per prendere in giro il contenitore è se si sta passando in giro. Questo è un anti-modello.

Invece si desidera comporre l'intero grafico dell'oggetto nel punto di ingresso dell'applicazione o Composition Root.

Se è necessario creare istanze al volo, utilizzare Automatic Factories.

Per i test, è possibile costruire l'oggetto in prova e passare oggetti di simulazione al costruttore o creare un nuovo contenitore nel test e registrare oggetti di simulazione con esso.

+1

D'accordo, fatto questa domanda quando ero giovane e nieve ... Stavo anche usando i contenitori IoC errati. –

1

Avete bisogno di un oggetto finto in piena regola? Potresti cavartela semplicemente implementando un falso? Ad esempio, implementando una verifica dell'istanza dell'interfaccia IUnityContainer e sovrascrivendo il metodo con cui è necessario interagire?

Sono caduto nella trappola più di una volta nel pensare che dal momento che ho una libreria di oggetti di simulazione, dovrei usarla per isolare ogni dipendenza nel mio sistema. Più spesso, fare qualcosa di più semplice mi dà i risultati che voglio con livelli di frustrazione molto più bassi.

+0

Perché è stato votato questo commento? Quelli che hanno votato per favore hanno lasciato un messaggio in modo che gli altri che seguono possano imparare meglio da SO. – Raj

+0

Infatti. Ho svalutato il compenso. La creazione di uno stub risolverebbe il problema evitandolo completamente (non è necessario alcun Moq necessario). È una soluzione legittima e per coloro che hanno votato questo argomento, ti incoraggio a condividere il motivo per il resto della classe. –

+0

Forse a Stackoverflowers non piacciono le persone con certificazioni? :) –

0

A causa di questo problema, non simulare IUnityContainer, utilizzo invece un'istanza reale di UnityContainer. Non è l'ideale, ma posso verificare la registrazione controllando che il contenitore possa risolvere i tipi più appropriati.

È possibile prendere in giro e utilizzare IServiceLocator quando lo si utilizza per risolvere i tipi nelle classi o, ancora meglio, utilizzare registrare una fabbrica con il contenitore e utilizzarlo.

1

Hai provato a prendere in giro UnityBaseContainer o UnityContainer invece di IUnityContainer, ala this post di Rory Primrose? Ha a che fare con RhinoMock ma poiché penso che il problema sia legato all'utilizzo interno di Castle da parte di Moq, potresti essere in grado di risolvere il problema in questo modo.

0

Stai eseguendo questo su Win x64? Date un'occhiata a questo page. Indica chiaramente.

Questa eccezione viene generata quando il formato del file di una libreria di collegamento dinamico (DLL file) o di un file eseguibile (.exe) non è conforme al formato che è previsto dal Common Language Runtime.

Inoltre, ha trovato questo blog che suggerisce di cambiare la bandiera di compilazione da qualsiasi CPU x86 potrebbe aiutare la causa. http://filips.net/archives/2008/01/17/getting-badimageformatexception-in-64-bit-windows/

Edit:

hanno anche uno sguardo al this SO filo. Dai anche un'occhiata al tuo Configuration Configuration Manager.