Mocking COM-интерфейсы с использованием Rhino Mocks - PullRequest
5 голосов
/ 10 августа 2010

У меня есть библиотека COM, на которую я должен ссылаться в своем приложении, и я пытаюсь смоделировать ее интерфейсы.

Я получаю исключения, когда я делаю это MockRepository.GenerateMock<IAmAComInterface>();

Я не получаю исключений, когда я делаю это: MockRepository.GenerateDynamicMockWithRemoting<IAmAComInterface>();, но ни одно из моих ожиданий не подтверждается.

Я что-то не так делаю?

На данный момент у меня есть куча обёрток для всех моих COM-интерфейсов, и я их высмеиваю, но мне бы очень хотелось, чтобы не пришлось оборачивать всё.

EDIT:
Исключения с GenerateMock:
System.TypeLoadException

С сообщением:
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.

При использовании теста GenerateDynamicMockWithRemoting всегда выдается сообщение Ожидаемый: 1 Фактический: 0 для любых ожиданий интерфейса COM.

Использование Rhino.Mocks 3.6.

Ответы [ 2 ]

13 голосов
/ 10 августа 2010

Похоже, это проблема "Эквивалентности типов" в .NET 4.0. Смотрите это для более подробной информации: http://code.google.com/p/moq/issues/detail?id=254

Исправить (как отмечено выше) легко, добавив:

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

К вашему юнит-тесту.

2 голосов
/ 26 июня 2015

Я решил ту же проблему этим решением (из вопроса Как проверить COM-зависимый объект в C # ): https://stackoverflow.com/a/4333388/185498

Попробуйте установить "Вставить типы взаимодействия""ЛОЖЬ для сборки, содержащей интерфейс COM.

...