Подтвердить что ты не робот

VS2012 & TFS2012 Unit Test основные проблемы

Мы используем VS2012 и TFS2012 и записываем единичные тесты для нашего кода. Мы хотим сообщить о покрытии кода, а также использовать файлы .config в наших модульных тестах для тестовых настроек, а также некоторые другие настройки для ведения журнала, настройки библиотеки MS Enterprise и т.д.


App.config не работает в новой тестовой среде

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

У нас возникла проблема с DLL смешанного режима и найдено исправление: добавление

<startup useLegacyV2RuntimeActivationPolicy="true"> 

в app.config. Но это не сработало для нашего проекта unit test. Конфигурационных файлов Becuase больше нет. Поиск в Интернете придумал решение

'Проблемы с сетями смешанного режима .Net 2.0 внутри Visual Studio.Net 4.5 тестовых проектов

Это означает редактирование файла самой Visual Studio 11 в каталоге файлов программ, а не отличное решение, которое я думаю....

А как насчет некоторых базовых приложений? Как я должен установить это?


Не используйте файл .testSettings

Использование старого файла .testsettings также не рекомендуется MS, потому что используется старая тестовая среда. И если я использую файл .testsettings, я не могу установить Code Coverage в моей службе сборки tfs2012.

Другая проблема заключается в том, что у нас есть код, которому нужна dll (system.data.sqlite.dll), но только во время выполнения код unit test нуждается в этой dll. Поэтому ссылка не нужна. Мы исправили это, используя вкладку "Развертывание" в файле настроек тестов. Но в новой структуре вы не должны использовать файл testettings. У вас есть атрибут [deploymentitem], если вам нужны файлы. Но атрибут deploymentitem может использоваться только на [testmethod] не на методе [testinitialize] или [assemblyinitialize]. Но наш код нуждается в dll в методе [testinitialize]. Таким образом, нет возможности получить DLL на месте.

Просто скопируйте его с помощью File.Copy в методе [assemblyinitialize] (или testinitialize), который не работает.

Добавление DLL файла в проект и установление 'copy to output directory' в 'Copy Always', как указано в 'Конфигурирование модульных тестов, используя Файл .runsettings File 'также не работает вообще.

Решение (действительно не очень) для этого заключается в том, чтобы добавить dll в качестве ссылки, а затем создать экземпляр класса и не делать с ним ничего. Таким образом, dll требуется, иначе он не будет создан, и, следовательно, dll развернется в нужные каталоги.


как решить мою проблему (ы)??? - Я хочу использовать конфигурационные файлы в моем unit test. - Я хочу развернуть некоторые файлы, которые нуждаются в методах 'assemblyinitialise' и/или 'classinitialize'. - Я хочу, чтобы Code Coverage на моей ночной сборке TFS2012 включен.

4b9b3361

Ответ 1

a) App.config не работает в новой тестовой среде

Это должно работать. В этом случае, как мне кажется, отсутствует этот файл .config, который не копируется с вашей тестовой dll. Не могли бы вы установить это как элемент развертывания и повторить попытку?

b) Не используйте файл .testSettings

  • .testsettings и покрытие кода. Настройка покрытия кода файлом .testsettings по-прежнему поддерживается в сборке VS 2012. Вам просто нужно выбрать тест-тест mstest 2010 и указать файл .testsettings в определении сборки

Если у вас нет ничего, кроме настроек покрытия кода в файле .testsettings, вы можете легко перенестись на тестовый бегун 2012 года и выбрать "включить покрытие кода" в раскрывающихся элементах

  • копирование файла, требуемого тестом initalize Вы можете сделать это через файл .testsettings или у вас может быть задача копирования файлов после сборки. Это довольно прямолинейно, и это не влияет ни на что другое. Использование "copy to output directory = copy always" действительно работает. Попробуйте его с помощью примерного решения и посмотрите, можете ли вы сузить, почему это не работает в вашей настройке.