4

TeamCityで実行しているときに、出力カバレッジファイルにカバレッジが表示されないプロジェクトがあります。コマンドラインから実行すると、問題なくカバーされます。どうやら、TeamCityの実行時に使用されるローカルシステムアカウントにいくつかのアクセス許可の問題があります。つまり、TeamCityランナーを変更して、カバレッジを提供するマシンにアクセスするために使用するログインの1つを使用する場合です。ただし、TeamCityサービスでそのユーザーのパスワードを維持したくありません。

nantスクリプトでOpenCoverを開始するときに、-register:userパラメーターを使用していますが、これは役に立ちません。

TeamCityで実行しているときにカバレッジを機能させるために推奨されるセットアップは何ですか?

4

2 に答える 2

5

zippy32を使用してOpenCover.Profiler.dllを手動で事前登録します。ただし、これを実行するには、管理者権限でcmdを実行する必要があります。

于 2012-08-21T22:07:08.187 に答える
4

最近MSBuildでこれを設定しましたが、正常に機能しています。これが私のMSBuildスクリプトの関連部分です:

<Project DefaultTargets="Build;Test;Archive;" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <UsingTask AssemblyFile=
        "..\..\tools\MSBuildCommunityTasks\MSBuild.Community.Tasks.dll"
        TaskName="MSBuild.Community.Tasks.Xslt" />

  <PropertyGroup>
    <!--Default Configuration-->
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

    <!--Default Platform-->
    <Platform Condition=" '$(Platform)' == '' ">"Any CPU"</Platform>

    <!--Test assemblies-->
    <TestAssemblies>HelloWorld.Mvc3UI.UnitTests\bin\$(Configuration)\HelloWorld.Mvc3UI.UnitTests.dll</TestAssemblies>

  </PropertyGroup>

  <Target Name="Build">
    <MSBuild Targets="Clean;Rebuild" Projects="HelloWorld.sln"  ContinueOnError="false"/>
  </Target>

    <Target Name="Test">

        <!-- Check Code Coverage -->
        <Exec Command="..\..\tools\OpenCover.4.0.519\OpenCover.Console.exe -register:user -target:..\..\tools\NUnit\nunit-console.exe -targetargs:&quot;$(TestAssemblies) /xml=NUnitReport.xml /noshadow&quot; -filter:&quot;+[HelloWorld.Mvc3UI*]* -[HelloWorld.Mvc3UI.UnitTests*]*&quot; -output:OpenCoverReport.xml"></Exec>
        <!-- Format Code Coverage Report -->
        <Exec Command="..\..\tools\ReportGenerator.1.5.0.0\ReportGenerator.exe OpenCoverReport.xml OpenCoverReport"></Exec>

        <Xslt Inputs="NUnitReport.xml"
            Xsl="..\..\tools\NUnit\NUnitReport.xsl"
            Output="NUnitReport.html" />
    </Target>

    <Target Name="Archive">
        <Exec Command="..\..\tools\7-Zip.9.20\7za.exe a build.zip &quot;HelloWorld.Mvc3UI\*&quot;"></Exec>
    </Target>

</Project>

重要なのは、NUnitの/ noshadowオプションを使用し、OpenCoverの-registerスイッチを使用することです(実行するにはCOM登録が必要ですが、このスイッチはTeamCityユーザーアカウントの一時的な登録を行います)。

OpenCoverが時々ハングするのを防ぐために、ここに概説されているように、サポートされているランタイムとしてnunit-console.exe.configファイルの.NET2.0を無効にすることも役立ちます。

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <!-- Comment out the next line to force use of .NET 4.0 -->
    <!-- <supportedRuntime version="v2.0.50727" /> -->
    <supportedRuntime version="v4.0.30319" />
  </startup>
于 2012-08-21T17:47:52.737 に答える