Как протестировать зависимый объект COM в C#

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

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

Система. TypeLoadException был не обработан пользовательским Message=Could кода не, загружают тип 'Замок. Proxies.iTunesAppProxy' от блока 'DynamicProxyGenAssembly2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'. Тип отмечен как имеющий право на эквивалентность типа, но или это имеет универсальные параметры, или это не структура, COM импортированный интерфейс, перечисление или делегат

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

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

5
задан Iñaki Elcoro 11 July 2010 в 18:23
поделиться

2 ответа

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

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

[EDIT]

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

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

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

2
ответ дан 13 December 2019 в 22:01
поделиться

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

Что у меня в голове...

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

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

var component = new CoSomeThingMock();
var testObject = new Tested(component);
1
ответ дан 13 December 2019 в 22:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: