Заставить TeamCity запускать тесты NUnit с интегрированными NCover и TypeMock? - PullRequest
3 голосов
/ 01 февраля 2011

По сути, я хотел бы использовать плагин NUnit для TeamCity (программа, а не конкретный шаг сборки, использующий его) для запуска моих модульных тестов, с NCover для покрытия кода, и так как мои модульные тесты используют TypeMock 6, я нужно, чтобы это тоже работало.

Пока я пробовал:

  • Просто в основном указываю шаг сборки TeamCity NUnit на мои dll, но это приводит к ошибке со следующим сообщением об ошибке:

    Для запуска Typemock Isolator необходимо связать его с Coverage Tool, чтобы включить одно из следующих действий:

    1. связывает инструмент Coverage с помощью конфигурации изолятора Typemock
    2. запускать тесты через TMockRunner.exe -link
    3. использовать задачи TypeMockStart для MSBuild или NAnt с Link
  • Пытаясь выяснить правильную командную строку, я попробовал это:

    C: ... \ Isolator \ 6.0 \ TMockRunner.exe "C: \ TeamCity ... \ JetBrains.BuildServer.NUnitLauncher.exe" v4.0 MSIL NUnit-2.5.9 MyAssembly.dll

    Это не с той же ошибкой.

  • Установка переменных среды, найденных в файловой части mocking_on.bat TypeMock, это не меняет результат.

Обратите внимание, что вышеприведенные примеры не содержат никакой ссылки на NCover (пока), потому что я пару часов перебирал командную строку с приведенными выше примерами и до сих пор не получил базовый юнит- тесты запущены. NCover - это дополнительные опции для nunit-launcher TeamCity, так что я надеюсь, что это так же просто, как просто включить это, когда я доберусь до этого.

Ответы [ 2 ]

4 голосов
/ 01 февраля 2011

Поскольку TypeMock требует от вас использования их собственной программы запуска, TMockRunner, невозможно просто использовать параметры графического интерфейса в TeamCity для настройки всего.

Вместо этого я в итоге собрал первую сборкупользовательский файл msbuild с таким содержимым:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <TypeMockLocation>C:\Program Files (x86)\TypeMock\Isolator\6.0</TypeMockLocation>
        <NUnit>"C:\TeamCity\buildAgent\plugins\dotnetPlugin\bin\JetBrains.BuildServer.NUnitLauncher.exe"</NUnit>
        <NCover>C:\Program Files (x86)\NCover\NCover.Console.exe</NCover>
    </PropertyGroup>
    <Import Project="$(TypeMockLocation)\TypeMock.MSBuild.Tasks"/>
    <Target Name="TestWithTypeMock">
        <TypeMockStart Link="NCover3.0" ProfilerLaunchedFirst="true" Target="2.0"/>
            <Exec ContinueOnError="true" Command="$(NUnit) v2.0 x86 NUnit-2.5.9 SqlDatabases.Core.Tests\bin\Debug\SqlDatabases.Core.Tests.dll SqlDatabases.SqlServer.Tests\bin\Debug\SqlDatabases.SqlServer.Tests.dll /ncover:%22$(NCover)%22 /ncover-arg://ias /ncover-arg:SqlDatabases.Core /ncover-arg://ias /ncover-arg:SqlDatabases.SqlServer /ncover-arg://et /ncover-arg:.*Exception /ncover-arg://x /ncover-arg:c:\temp\coverage.xml"/>
        <TypeMockStop/>
    </Target>
</Project>

Этот файл я сохраняю в каталоге на моем сервере TeamCity.Поскольку я не хотел, чтобы тестовый сценарий был частью моего репозитория, я не добавил его в систему управления версиями (я могу создавать и щелкать правой кнопкой мыши и запускать тесты из Visual Studio, если получаю что-то, не связанное с моимпостроить сервер, я мог бы изменить это решение позже).Кроме того, у меня есть только 1 агент сборки для моего сервера TeamCity, так что пока это работает для меня.

В дополнение к вышеуказанному файлу я добавил следующий пакетный файл:

@echo off
setlocal
set CURDIR=%CD%
copy c:\dev\sqldatabases\tests.msbuild .\
msbuild tests.msbuild /target:TestWithTypeMock
rd /s /q c:\dev\sqldatabases\codecoverage
md c:\dev\sqldatabases\codecoverage
"c:\program files\ncover\ncover.reporting.exe" c:\temp\coverage.xml //or FullCoverageReport:Html:c:\dev\sqldatabases\codecoverage
cd \dev\sqldatabases\codecoverage
del %CURDIR%\coverage.zip
7z a -r %CURDIR%\coverage.zip

А затем я добавил следующие два шага сборки в конфигурацию сборки TeamCity:

  1. Решение Visual Studio: создайте конфигурацию отладки.
  2. Выполните C: \ Dev \ SqlDatabases\ Tests.bat (вышеуказанный пакетный файл)

Я убедился, что coverage.zip указан в списке артефактов в моей конфигурации сборки, и теперь я получил покрытие кода, typemock и модульные тесты.

Единственное, что я так и не понял, как это сделать, так это то, что если я нажму на результат сборки конфигурации сборки, которая использует обычный графический интерфейс TeamCity для настройки всего (кроме TypeMock), я получу покрытие кодакраткая сводка в списке, это не присутствует в вышеупомянутой настройке, но полный отчет есть, и вкладка в результатах сборки TeamCity.

Надеюсь, это может спасти кого-то еще.

0 голосов
/ 01 февраля 2011

Лассе,

Пока вы используете TeamCity GUI, запуск с покрытием NCover должен быть простым делом выбора для запуска с ним. Я никогда не пробовал добавлять Typemock в микс, поэтому я с нетерпением жду возможности услышать, как это идет.

...