2009-03-16 12 views
5

Ich versuche, den IUnityContainer mit Moq 3.0 zu verspottenWie machst du IUnityContainer?

Ich bekomme eine BadImageFormatException, aber nicht beim Debuggen. Wie es aussieht, bin ich nicht die Einzige, die auf dieses Problem gestoßen ist.

here

Und es ist ein eingetragenes Thema für Moq

here

Ich bin nur neugierig, wenn jemand eine Lösung gefunden hat ... nächstgelegene ich gefunden habe, ist eine schöne Lösung, die verwendet RhinoMock von Roy Osherove

here

aber ich wirklich wie Moq! Also ich will nicht wirklich auf Rhino Mock umstellen müssen aber ich werde wenn ich muss

Vielen Dank im Voraus!

+0

Ich habe das gleiche Problem. Bitte lassen Sie mich wissen, wenn Sie eine Lösung gefunden haben. – toxvaerd

+0

Also, gibt es noch keine Lösung? Ich habe das gleiche Problem mit 3.1 Moq auf 3.5sp1. – Shrike

Antwort

4

Sie nicht.

Der einzige Grund, den Container zu verspotten, ist, wenn Sie es herumreichen. Das ist ein Anti-Muster.

Stattdessen möchten Sie das gesamte Objektdiagramm am Eingangspunkt der Anwendung erstellen, oder Composition Root. Wenn Sie Instanzen im laufenden Betrieb erstellen müssen, verwenden Sie .

Für Ihre Tests können Sie entweder das zu testende Objekt erstellen und Mock-Objekte an den Konstruktor übergeben oder einen neuen Container im Test erstellen und Mock-Objekte damit registrieren.

+1

Einverstanden, machte diese Frage, als ich jung und nieve war ... Ich benutzte auch IoC-Container falsch. –

1

Benötigen Sie ein ausgewachsenes Mock-Objekt? Könnten Sie mit der Implementierung eines Fake auskommen? Das heißt, Sie implementieren eine Testinstanziierung der IUnityContainer-Schnittstelle und überschreiben die Methode, mit der Sie interagieren müssen.

Ich bin mehr als einmal in die Falle gelaufen, als ich dachte, dass ich, da ich eine Mock-Objekt-Bibliothek habe, sie verwenden sollte, um jede Abhängigkeit in meinem System zu isolieren. Meistens bringt mir etwas einfacheres die Ergebnisse, die ich möchte, mit viel niedrigeren Frustrationsniveaus.

+0

Warum wurde dieser Kommentar abgelehnt? Diejenigen, die unten abgestimmt haben, kümmern sich darum, eine Notiz zu hinterlassen, damit andere, die folgen, von SO besser lernen können. – Raj

+0

In der Tat. Ich habe den Ausgleich erneuert. Das Erstellen eines Stubs würde das Problem lösen, indem es vollständig vermieden wird (keine Verwendung von Moq erforderlich). Es ist eine legitime Workaround und für diejenigen, die dies abgelehnt haben, möchte ich Sie ermutigen, warum für den Rest der Klasse zu teilen. –

+0

Vielleicht mag Stackoverflowers keine Leute mit Zertifizierungen? :) –

0

Wegen dieses Problems spotte ich nicht IUnityContainer, ich verwende stattdessen eine echte Instanz von UnityContainer. Es ist nicht ideal, aber ich kann die Registrierung testen, indem ich überprüfe, ob der Container die Typen entsprechend auflösen kann.

Sie können IServiceLocator vortäuschen und verwenden, wenn Sie es verwenden, um Typen in Ihren Klassen aufzulösen, oder noch besser, verwenden Sie eine Fabrik mit dem Container und verwenden Sie diese stattdessen.

1

Haben Sie versucht, UnityBaseContainer oder UnityContainer anstelle von IUnityContainer, ala this post von Rory Primrose zu verspotten? Er beschäftigt sich mit RhinoMocks, aber weil ich denke, dass das Problem mit Moqs interner Nutzung von Castle zusammenhängt, können Sie das Problem auf diese Weise lösen.

0

Laufen Sie das auf Win x64? Werfen Sie einen Blick auf diese page. Es deutet deutlich darauf hin.

Diese Ausnahme wird ausgelöst, wenn das Dateiformat einer Dynamic Link Library (DLL-Datei) oder eine ausführbare Datei (EXE-Datei) nicht das Format entsprechen, die von der Common Language Runtime zu erwarten ist.

Auch fand diesen Blog-Eintrag, die die Zusammenstellung Flagge von Any CPU auf x86 schlägt das Ändern der Ursache helfen. http://filips.net/archives/2008/01/17/getting-badimageformatexception-in-64-bit-windows/

Edit:

haben auch einen Blick auf this SO fädeln. Sehen Sie sich auch Ihren Build Configuration Manager an.

Verwandte Themen