Да, это возможно.
Мы запускаем довольно обычную установку (стиль правительства без передовых границ) с CruiseControl.Net работает NAnt работает MSBuild, NUnit , Кодовые контракты , Pex .Тесты генерируются с помощью графического интерфейса Pex Visual Studio (Professional edition), а затем сгенерированные файлы регистрируются в нашем SVN.На сервере нет дополнительного шага Pex, но он по-прежнему выполняет все тесты NUnit как обычный набор тестов.Поскольку мы используем Code Contracts, шаг после сборки Code Code все еще необходимо выполнить.
При запуске Pex в Visual Studio для создания параметризованных тестов, он позволит вам выбрать, какую инфраструктуру тестирования использовать.Для нового проекта выберите NUnit и при появлении запроса перейдите в папку, содержащую nunit.framework.dll
, связанную с вашим проектом.
Пока (по крайней мере, пока все в моем отделе не привыкли к Pex), мы разделилирукописные тесты из сгенерированных тестов Pex, разделив их на два тестовых проекта на проект кода.Например, Product.XYZ
имеет как Product.XYZ.Tests
(обычные рукописные тесты NUnit), так и Product.XYZ.PexTests
(полностью сгенерированный проект с только сгенерированными тестами).В рукописных тестах мы записываем ожидаемые (на основе бизнес-кейса) входные данные и результаты, а затем используем Pex, чтобы убедиться, что мы не пропустили какие-либо потенциально опасные пред- или постусловия.Оба набора тестов автоматически выполняются на машинах разработчика ReSharper и сервере сборки CCNet, плюс мы используем оба для проверки покрытия кода с использованием OpenCover .
Ниже приведены некоторые заметки, которые я пишу, пока они свежие.Может быть перемещен или удален.
Обратите внимание, что нет необходимости запускать установщик для Pex или Code Contracts на сервере сборки.Это помогает, если у вас скупые системные администраторы или проекты, которые могут использовать конфликтующие версии Pex или Code Contracts. Все еще Moles должен быть установлен на сервере сборки , поэтому пропустите это при использовании Moles.
- Пусть Pex сгенерирует тестовый проект NUnit
Product.XYZ.PexTests
длявы.Сгенерируйте также некоторые (только один или два для начала) параметризованных тестов метода Pex, и позвольте Pex генерировать .g.cs
файлы с фактическими тестами NUnit. - Создайте локальную копию
Microsoft.Pex.Framework.dll
для вашего решенияи повторно добавьте ссылку на проект Product.XYZ.PexTests
для вашей локальной копии.Удалите ваши .moles
и ссылки на Moles, Microsoft.ExtendedReflection.dll
, Microsoft.Moles.Framework.dll
. - Скопируйте установленные файлы Code Contracts в папку инструментов сборки вашего решения.(Вы можете очистить некоторые неиспользуемые файлы не для сборки позже.)
- Установите переменную
CodeContractsInstallDir
, чтобы она указывала на вашу папку Code Contracts (включая косую черту) перед сборкой (например, в вашем скрипте сборки). - Импорт
Microsoft.CodeContracts.targets
(см. Ниже) после других тегов <Import />
в файле Product.XYZ.csproj
проекта вашего кода. - (Необязательно) Проверка кода сборки Контрактов на время сборки до
</Project>
вашего кодаProduct.XYZ.csproj
проекта (см. XML ниже).Возможно, вы захотите переместить проверку в зависимости от того, включена ли проверка времени выполнения Code Contracts только для некоторых сборок. - Проверьте настройку Pex, собрав и выполнив тесты на сервере сборки.
Кодовые контракты строят целевой импорт
<Import Project="$(CodeContractsInstallDir)MsBuild\v4.0\Microsoft.CodeContracts.targets" />
Проверка кодовых контрактов из userdoc.pdf глава 5.1.3
<PropertyGroup>
<CompileDependsOn>$(CompileDependsOn);CheckForCodeContracts</CompileDependsOn>
</PropertyGroup>
<Target Name="CheckForCodeContracts" Condition="'$(CodeContractsImported)' != 'true'">
<Error Text="Project requires Code Contracts" />
</Target>
cruisecontrol.net nunit pex код-контракты c # -4.0