Как проверить COM-зависимый объект в C # - PullRequest
5 голосов
/ 11 июля 2010

Я пытаюсь сделать TDD с объектом, который зависит от интерфейса COM. Я думал о том, чтобы издеваться над интерфейсом COM во время тестирования разработки, и реально ли это делать на интеграционных тестах.

Однако я не могу издеваться над интерфейсом COM, я пытался с Moq, и он выдает исключение:

System.TypeLoadException не обработан по коду пользователя Сообщение = Не удалось загрузить тип 'Castle.Proxies.iTunesAppProxy' из сборки 'DynamicProxyGenAssembly2, Версия = 0.0.0.0, Культура = нейтральная, PublicKeyToken = нуль. Тип помечены как имеющие право на тип эквивалентность, но либо она имеет общий параметры, или это не структура, COM импортированный интерфейс, перечисление, или делегат

Возможно ли это с другими фреймворками? Как вы делаете TDD с COM-зависимыми объектами?

Заранее спасибо! Или делегат

Ответы [ 4 ]

5 голосов
/ 02 декабря 2010

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

2 голосов
/ 12 июля 2010

Я бы посоветовал вам стать владельцем интерфейса COM-объекта, вот где Принцип инверсии зависимости вступит в игру.

Если у вас нет доступа кисточник, вам нужно будет создать свою собственную абстракцию, которая обернет COM-объект, в противном случае вы будете иметь сторонние вызовы по всему вашему коду.абстракция должна быть в состоянии быть высмеянным.Реальная реализация оболочки будет иметь COM-объект в виде отношения HAS-A.

Затем вы захотите провести интеграционный тест для реализации.

Вам необходимо обработать COM-объектсамо по себе, как если бы это было что-то похожее на базу данных, графический движок или веб-сервис.

1 голос
/ 20 марта 2014

Вам необходимо добавить следующее в части инициализации, как описано здесь https://code.google.com/p/moq/issues/detail?id=254

Castle.DynamicProxy.Generators.AttributesToAvoidReplicating.Add(typeof (TypeIdentifierAttribute));
1 голос
/ 11 июля 2010

ОК, я думаю, что нет простого способа сделать это, не будучи уверенным, что некоторые из фальшивых фреймворков могут издеваться над COM.

Что у меня на уме ..

У вас есть некоторый интерфейс COM, ISomeThing и COM-объект реализуют этот интерфейс CoSomeThing, это некоторая реальная реализация. Вы должны реализовать еще один COM-компонент, который бы реализовывал тот же интерфейс, но на самом деле просто издевался над ним - CoSomeThingMock.

В своем коде вы создаете экземпляр CoSomeThingMock вместо CoSomeThing и используете его.

var component = new CoSomeThingMock();
var testObject = new Tested(component);
...