Перейти к содержимому

mishavin

Регистрация: 08 окт 2015
Offline Активность: 13 окт 2015 17:07
-----

Мои сообщения

В теме: MSTest сборка имитаций не видит COM объекты

09 октября 2015 - 12:33

Решил.
Распишу подробнее для тех, кто с этим встретится.
 
План был такой - сгенерировать файл с заглушками и на базе него сделать свой, исправив ошибки.
 
При работе понял как управляется генерация при помощи файла fakes. Оказывается этот файл совсем не нужно удалять. Прямо в нем можно нужно указать что генерировать, а что нет, а при перестроении проекта сборка имитаций будет сама перегенерирована по новым правилам.
Так как мне нужна была только заглушка на интерфейс я сделал так:
 
  <Assembly Name="MyLib1"/>
  <StubGeneration>
    <Clear/>
    <Add Interfaces ="true"/>
  </StubGeneration>
  <ShimGeneration>
    <Clear/>
  </ShimGeneration>
</Fakes>
 
Т.е. я указал сделать заглушки на все интерфейсы, ну а так как он у меня один - то будет сделана заглушка на IGetMyVal.
 
После этого нужно взять сгенерированный код.
Для этого нужно встать на проект теста в проводнике решения и нажать кнопку "Показать все файлы" (вверху проводника).
После этого в каталоге obj\Debug\Fakes\ml1 нужно встать на файл f.cs и скопировать его содержимое.
 
ml1 - это alias, который дала для моей библиотеки MyLib1 система генерации кода. В Вашем случае будет другое.
 
После этого в сборке ТЕСТА нужно добавить пустой класс и скопировать в него содержимое из буфера клавиатуры (из f.cs).
 
Класс нужно создавать именно в сборке для теста. Если попытаться сделать отдельный модуль и в нем сделать класс (и сделать указатель на него в тестовой сборке), то получим ошибку компиляции о что-то типа "... тип не может работать через границы сборки..."
 
Теперь подправляем полученный класс. Нужно сделать следующее:
1. Закомментировать строки extern... и [assembly...
2. Удалить mqttf::  и ml1:: (Про наименование ml1 я уже писал выше). Ошибка заключается в том, что Range генератор кода помещает под ml1!
 
 
Все. Заглушка готова. Можно ей пользоваться!
 
Ах, да. Удалите файле MyLib1.fakes (имя_вашего_модуля.fakes) из каталога Fakes - это удалит генерацию кода сборки имитаций.