5 Stimmen

Mocking von COM-Schnittstellen mit Rhino Mocks

Ich habe eine COM-Bibliothek, die ich in meiner Anwendung verweisen müssen, und ich versuche, seine Schnittstellen zu spiegeln.

Ich erhalte Ausnahmen, wenn ich dies tue MockRepository.GenerateMock<IAmAComInterface>();

Ich bekomme keine Ausnahmen, wenn ich das tue: MockRepository.GenerateDynamicMockWithRemoting<IAmAComInterface>(); aber keine meiner Erwartungen hat sich bestätigt.

Mache ich etwas falsch?

Im Moment habe ich eine Reihe von Wrappern für alle meine COM-Schnittstellen und ich bin Mocking sie, aber ich würde wirklich gerne nicht haben, um alles zu wickeln.

EDIT:
Ausnahmen mit GenerateMock:
System.TypeLoadException

Mit der Botschaft von:
The type is marked as eligible for type equivalence, but either it has generic parameters, or it is not a structure, COM imported interface, enumeration, or delegate.

Bei der Verwendung von GenerateDynamicMockWithRemoting Testfehler sagt immer Expected: 1 Actual: 0 für alle Erwartungen auf der COM-Schnittstelle.

Verwendung von Rhino.Mocks 3.6.

13voto

PatrickSteele Punkte 13938

Sieht aus wie dies ist ein Problem mit .NET 4.0's "Type Equivalence". Siehe dies für weitere Details: http://code.google.com/p/moq/issues/detail?id=254

Die Lösung (wie oben erwähnt) ist einfach durch Hinzufügen:

Castle.DynamicProxy.Generators.AttributesToAvoidReplicating.Add(typeof (TypeIdentifierAttribute));

Zu Ihrem Einheitstest.

3voto

Manushin Igor Punkte 3030

Ich habe das gleiche Problem mit dieser Lösung gelöst (aus Frage Wie testet man ein COM-abhängiges Objekt in C#? ): https://stackoverflow.com/a/4333388/185498

Versuchen Sie, "Embed Interop Types" auf FALSE für die Assembly zu setzen, die die COM-Schnittstelle enthält.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X