Как настроить TeamCity / NAnt / Gallio / PartCover для отображения результатов тестирования?

Я впервые настраиваю teamcity, и у меня возникают проблемы с отображением результатов. Я хочу иметь этап сборки, на котором выполняется сценарий NAnt. Скрипт должен запускать мои модульные тесты через PartCover и отображать результаты. Результат должен быть:

  • Пройденные тесты / Неудачные тесты
  • Отчет о покрытии

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

<project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

<loadtasks assembly="C:\Program Files\Gallio\bin\Gallio.NAntTasks.dll" />

<target name="test"> 
  <gallio result-property="exitCode" failonerror="false" > 
    <runner-extension value="TeamCityExtension,Gallio.TeamCityIntegration" /> 
    <files> 
      <include name="%system.teamcity.build.checkoutDir%\Trunk\MyLibrary.Testing\bin\Release\MyLibrary.Testing.dll"/> 
    </files> 
  </gallio> 
  <fail if="${exitCode != '0'}" >One or more tests failed. Please check the log for more details</fail>    
</target>

</project>

Для раздела .Net Coverage у меня выбран PartCover (2.2 или 2.3), но у меня нет ничего в аргументах PartCover (должен ли я?)

Спасибо за вашу помощь!


person i8abug    schedule 15.12.2010    source источник


Ответы (2)


По моему опыту, вам не следует запускать Gallio напрямую. Вместо этого вам следует запустить PartCover и указать в параметрах командной строки Gallio в качестве цели. Вы можете найти несколько советов по Nant + PartCover здесь: Интеграция PartCover.NET с NAnt

person Ivan Gerken    schedule 28.12.2010

У меня возникли проблемы с NAnt, и я решил просто использовать MSBuild. С MSBuild было проще работать, и он давал очень подробные сообщения об ошибках. (Я также нашел нашу лицензию на NCover, поэтому тоже использовал ее). Вот мой сценарий для всех, кому интересно. Я нашел его код в разных местах сети.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <CoverageDir>.\Tests\Output\Coverage</CoverageDir>
    <CoverageFilesDir>.\Tests\Output\Coverage\files</CoverageFilesDir>
    <BinDir>Testing\bin\x86\Release</BinDir>
    <NCoverDir>C:\Program Files (x86)\NCover</NCoverDir>
    <GallioDir>C:\Program Files (x86)\Gallio\bin</GallioDir>
  </PropertyGroup>

  <UsingTask TaskName="NCover" AssemblyFile="$(NCoverDir)\Build Task Plugins\NCover.MSBuildTasks.dll" /> 
  <UsingTask TaskName="NCoverExplorer" AssemblyFile="$(NCoverDir)\Build Task Plugins\NCoverExplorer.MSBuildTasks.dll"/>

  <!-- Specify the tests assemblies --> 
  <ItemGroup> 
    <TestAssemblies Include="$(BinDir)\library.Testing.dll" />
    <CoverageAssemblies Include="$(BinDir)\library.dll" />
  </ItemGroup>

    <Target Name="Coverage">
      <Message Text="Creating $(CoverageFilesDir)" />
      <MakeDir Directories="$(CoverageFilesDir)"/>

      <Message Text="##-------------------- Running Coverage Reports --------------------##" /> 
      <Message Text="Coverage Assemblies @(TestAssemblies)" />

      <!--Run NCover to gather coverage information-->
      <NCover
      ToolPath="$(NCoverDir)"
      TestRunnerExe="$(GallioDir)\Gallio.Echo.exe"
      TestRunnerArgs="%(TestAssemblies.FullPath)"
      IncludeAssemblies="@(CoverageAssemblies)"
      LogFile="$(CoverageFilesDir)\%(TestAssemblies.Filename)-ncover.log"
      RegisterProfiler="false"
      CoverageFile="$(CoverageFilesDir)\%(TestAssemblies.Filename)-coverage.xml"/>    

      <CreateItem Include="$(CoverageFilesDir)\*-coverage.xml">
        <Output TaskParameter="Include" ItemName="CoverageReports"/>
      </CreateItem>

      <!--Generate coverage report-->
      <NCoverExplorer
        ToolPath="$(NCoverDir)"
        ProjectName="Library Coverage"
        ReportType="4"
        Sort="CoveragePercentageAscending"
        Filter="None"
        OutputDir="$(CoverageDir)"
        XmlReportName="CoverageReport.xml"
        HtmlReportName="CoverageReport.html"
        ShowExcluded="True"
        SatisfactoryCoverage="15"
        FailMinimum="False"
        CoverageFiles="@(CoverageReports)"/>

      <!-- In case one of the tests fails, make sure to stop TypeMock and unregister NCover. -->
      <OnError ExecuteTargets="test-finally"/>
  </Target>

  <!-- Stopping unregistering NCover is a separate target because it has to happen -->
  <!-- regardless of success or failure of the unit tests. Like the "finally" in a "try/finally" block. -->
  <Target Name="test-finally">
    <Exec Command="regsvr32 /u /s &quot;$(NCoverDir)\CoverLib.dll&quot;" ContinueOnError="true"/>
  </Target>

</Project>
person i8abug    schedule 05.01.2011