![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| vinvin1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 27.3.2007 Репутация: нет Всего: нет |
Для примера использую такой код, который нужно протестировать.
Использую MSTest. Мне нужно создать заглушку для метода IGetMyVal.GetMyVal.
Проблема в том, что когда я создаю сборку имитаций, то в ней оказывается много ошибок. Ругается на то, что тип Range не определен. Это одна ошибка. Но почему не определен - непонятно! Указатели на Excel я в тестовый модуль добавил. В журнале MyLib1.Fakes.messages пишет: c:\Users\Admin\Documents\Visual Studio 2013\Projects\MyLib1\UnitTestProject1\Fakes\MyLib1.fakes : warning : Невозможно создать заглушку для Microsoft.Office.Interop.Excel.Range: тип создан компилятором. Это и понятно. Но мне и не нужна заглушка для Range. Но как заставить MSTest не генерить для Range заглушек и оболочек? В MSDN читал "Формирование и компиляция кода, а также соглашения об именовании в Microsoft Fakes" Там есть описание как в файле fakes указать не генерить заглушки и оболочки, НО для генерации новой сборки имитаций я должен сначала удалить старый fakes файл! Да, но там же я дал указания генератору - что не нужно генерить!!!!! Короче круг замкнулся. Бьюсь с этим уже тритий день. Это сообщение отредактировал(а) vinvin1 - 7.10.2015, 16:41 |
|||
|
||||
| vinvin1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 27.3.2007 Репутация: нет Всего: нет |
Решил.
Распишу подробнее для тех, кто с этим встретится. План был такой - сгенерировать файл с заглушками и на базе него сделать свой, исправив ошибки. При работе понял как управляется генерация при помощи файла fakes. Оказывается этот файл совсем не нужно удалять. Прямо в нем можно нужно указать что генерировать, а что нет, а при перестроении проекта сборка имитаций будет сама перегенерирована по новым правилам. Так как мне нужна была только заглушка на интерфейс я сделал так: <Fakes xmlns="http://schemas.micro...m/fakes/2011/"> <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 - это удалит генерацию кода сборки имитаций. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |