コード カバレッジ分析のカスタマイズCustomizing Code Coverage Analysis

既定では、Visual Studio Code カバレッジ ツールは、単体テスト中に読み込まれるすべてのソリューション アセンブリ (.exe/.dll) を分析します。By default, the Visual Studio Code Coverage tool analyzes all solution assemblies (.exe/.dll) that are loaded during unit tests. 多くの場合は、この設定が効果的なので、既定のままにしておくことをお勧めします。We recommend that you retain this default, because it works well most of the time. 詳細については、「コード カバレッジを使用した、テストされるプロジェクトのコード割合の確認」を参照してください。For more information, see Using Code Coverage to Determine How Much Code is being Tested.

コード カバレッジの動作をカスタマイズする前に、次のようないくつかの代替手段を検討してください。Before customizing the code coverage behavior, consider some alternatives:

  • コード カバレッジの結果からテスト コードを除外して、アプリケーションのコードのみを含めます。I want to exclude the test code from the code coverage results and include only the application code.

    テスト クラスに ExcludeFromCodeCoverage Attribute を追加します。Add the ExcludeFromCodeCoverage Attribute to your test class.

  • ソリューションの一部ではないアセンブリを含めます。I want to include assemblies that are not part of my solution.

    これらのアセンブリの .pdb ファイルを取得し、アセンブリ .dll ファイルと同じフォルダーにコピーします。Obtain the .pdb files for these assemblies and copy them into the same folder as the assembly .dll files.

    コード カバレッジの動作をカスタマイズするには、このトピックの最後にあるサンプルをコピーし、ファイル拡張子を .runsettings にしてソリューションに追加します。To customize the code coverage behavior, copy the sample at the end of this topic and add it to your solution using the file extension .runsettings. ニーズに合わせて編集し、[テスト] メニューで [テストの設定][テスト設定ファイルの選択] の順に選択します。Edit it to your own needs, and then on the Test menu, choose Test Settings, Select Test Settings file. このトピックの残りの部分では、この手順を詳しく説明します。The remainder of this topic describes this procedure in more detail.

.runsettings ファイルThe .runsettings file

高度なコード カバレッジの設定は、.runsettings ファイルで指定されます。Advanced code coverage settings are specified in a .runsettings file. これは、単体テスト ツールによって使用される構成ファイルです。This is the configuration file used by unit testing tools. このトピックの最後にあるサンプルをコピーし、ニーズに合わせて編集することをお勧めします。We recommend you copy the sample at the end of this topic and edit it to suit your own needs.

  • Visual Studio 2010 の .testsettings ファイルとの違いWhat happened to the .testsettings file I used in Visual Studio 2010?

    Visual Studio 2010 では、.testsettings ファイルは MSTest フレームワークに基づいて、単体テストだけに適用されます。In Visual Studio 2010, the .testsettings file applies only to unit tests based on the MSTest framework. Visual Studio 2012 では、テスト ツールは MSTest だけでなく、NUnit、xUnit.net など、他のフレームワークにも適用されます。In Visual Studio 2012, the testing tools apply not only to MSTest, but also other frameworks such as NUnit and xUnit.net. .testsettings ファイルは、これらでは機能しません。The .testsettings file will not work with these. .runsettings ファイルは、すべてのテスト フレームワークで機能する方法でテスト ツールをカスタマイズできるように設計されています。The .runsettings file is designed to customize the test tools in a way that works with all testing frameworks.

    コード カバレッジをカスタマイズするには、ソリューションに .runsettings ファイルを追加する必要があります。To customize code coverage, you will need to add a .runsettings file to your solution:

  1. .runsettings という拡張子で、ソリューション項目として .xml ファイルを追加します。Add an .xml file as a solution item with the extension .runsettings:

    ソリューション エクスプローラーでソリューションのショートカット メニューを開き、[追加][新しい項目][XML ファイル] の順にクリックします。In Solution Explorer, on the shortcut menu of your solution, choose Add, New Item, and select XML File. 末尾が CodeCoverage.runsettings などになる名前でファイルを保存します。Save the file with a name ending such as CodeCoverage.runsettings

  2. このトピックの最後にあるサンプルの内容を追加し、以下の各セクションの説明に従って、ニーズに合わせてカスタマイズします。Add the content given in the sample at the end of this topic, and then customize it to your needs as described in the following sections.

  3. [テスト] メニューで [テストの設定][テスト設定ファイルの選択] の順に選択し、ファイルを選択します。On the Test menu, choose Test Settings, Select Test Settings File and select the file.

  4. これで、[コード カバレッジの分析] を実行すると、この .runsettings ファイルが動作を制御するようになります。Now when you run Analyze Code Coverage, this .runsettings file will control its behavior. コード カバレッジを再度実行する必要があることに注意してください。前のカバレッジの結果とコードの色分けは、テストを実行したりコードを更新したりしても、自動的に非表示にはなりません。Don't forget that you must run code coverage again: your previous coverage results and code coloring aren't automatically hidden when you run tests or update your code.

  5. カスタム設定のオンとオフを切り替えるには、[テストの設定] メニューの [テスト] でファイルを選択したり選択解除したりします。To turn the custom settings off and on, deselect or select the file in the Test, Test Settings menu.

    カスタム設定ファイルを持つ [テストの設定] メニューTest settings menu with custom settings file

    単体テストのその他の面も、同じ .runsettings ファイルで構成できます。Other aspects of unit tests can be configured in the same .runsettings file. 詳しくは、「コードの単体テストUnit Test Your Code」をご覧ください。For more information, see Unit Test Your Code.

シンボル検索パスの指定Specifying symbol search paths

コード カバレッジでは、アセンブリのシンボル (.pdb ファイル) が存在している必要があります。Code coverage requires symbols (.pdb files) for assemblies to be present. ソリューションによってビルドされたアセンブリには、通常、バイナリ ファイルと共にシンボル ファイルも存在しており、コード カバレッジは自動的に動作します。For assemblies built by your solution, symbol files are generally present alongside the binary files, and code coverage works automatically. ただし、場合によっては、参照されるアセンブリをコード カバレッジ分析に追加したいこともあります。But in some cases, you might want to include referenced assemblies in your code coverage analysis. そのような場合、.pdb ファイルがバイナリと同じ場所にないこともありますが、シンボル検索パスを .runsettings ファイルで指定できます。In such cases, the .pdb files might not be adjacent to the binaries, but you can specify the symbol search path in the .runsettings file.

<SymbolSearchPaths>                
      <Path>\\mybuildshare\builds\ProjectX</Path>  
      <!--More paths if required-->  
</SymbolSearchPaths>  

警告

シンボルの解決には、特に多数のアセンブリでリモートのファイルの場所を使用している場合、時間がかかることがあります。Symbol resolution can take time, especially when using a remote file location with a lot of assemblies. そのため、リモート .pdb ファイルをバイナリ (.dll または .exe) ファイルと同じローカルの場所にコピーすることを検討してください。Therefore, consider copying remote .pdb files to the same local location as the binary (.dll and .exe) files.

除外と包含Excluding and including

指定したアセンブリをコード カバレッジ分析から除外できます。You can exclude specified assemblies from code coverage analysis. 次に例を示します。For example:

<ModulePaths>  
  <Exclude>  
   <ModulePath>Fabrikam.Math.UnitTest.dll</ModulePath>  
   <!-- Add more ModulePath nodes here. -->  
  </Exclude>  
</ModulePaths>  

逆に、どのアセンブリが包含されるかを指定することもできます。As an alternative, you can specify which assemblies should be included. ソリューションにアセンブリを追加するときに、一覧にも忘れずに追加しなければならないのが、この方法の欠点です。This approach has the drawback that when you add more assemblies to the solution, you have to remember to add them to the list:

<ModulePaths>  
  <Include>  
   <ModulePath>Fabrikam.Math.dll</ModulePath>  
   <!-- Add more ModulePath nodes here. -->  
  </Include>  
</ModulePaths>  

<Include> が空の場合、コード カバレッジの処理は、<Exclude> 一覧の句に一致する項目を除き、対応する .pdb ファイルが見つかる、読み込まれたすべてのアセンブリ (.dll と .exe ファイル) を対象にします。If <Include> is empty, then code coverage processing includes all assemblies (.dll and .exe files) that are loaded and for which .pdb files can be found, except for items that match a clause in an <Exclude> list.

Include は、Exclude の前に処理されます。Include is processed before Exclude.

正規表現Regular expressions

Include ノードと Exclude ノードでは、正規表現を使用できます。Include and exclude nodes use regular expressions. 詳細については、「Visual Studio での正規表現の使用」を参照してください。For more information, see Using Regular Expressions in Visual Studio. 正規表現は、ワイルドカードと同じではありません。Regular expressions are not the same as wildcards. 特に次の点に注意してください。In particular:

  1. .\* は任意の文字の文字列と一致します.\* matches a string of any characters

  2. \.\. はピリオド "." と一致しますmatches a dot ".")

  3. \( \) は "( )" と一致します\( \) matches parentheses "( )"

  4. \\ はファイル パス区切り記号 "\" と一致します\\ matches a file path delimiter "\"

  5. ^ は文字列の先頭と一致します^ matches the start of the string

  6. $ は文字列の末尾と一致します$ matches the end of the string

    すべての一致で、大文字と小文字が区別されます。All matches are case-insensitive.

    次に例を示します。For example:

<ModulePaths>  
  <Include>  
    <!-- Include all loaded .dll assemblies (but not .exe assemblies): -->  
    <ModulePath>.*\.dll$</ModulePath>  
  </Include>  
  <Exclude>  
    <!-- But exclude some assemblies: -->  
    <ModulePath>.*\\Fabrikam\.MyTests1\.dll$</ModulePath>  
    <!-- Exclude all file paths that contain "Temp": -->  
    <ModulePath>.*Temp.*</ModulePath>   
  </Exclude>  
</ModulePaths>  

警告

正規表現にエラー (エスケープされず、一致しないかっこなど) がある場合、コード カバレッジ分析は実行されません。If there is an error in a regular expression, such as an unescaped and unmatched parenthesis, then code coverage analysis will not run.

要素を包含または除外するための別の方法Other ways to include or exclude elements

例については、このトピックの末尾のサンプルを参照してください。See the sample at the end of this topic for examples.

  • ModulePath - アセンブリ ファイル パスで指定されたアセンブリ。ModulePath - Assemblies specified by assembly file path.

  • CompanyName - 会社名属性でアセンブリと一致します。CompanyName - matches assemblies by the Company attribute.

  • PublicKeyToken - 公開キー トークンで、署名付きアセンブリと一致します。PublicKeyToken - matches signed assemblies by the public key token. たとえば、すべての Visual Studio コンポーネントおよび拡張機能と一致させるには、<PublicKeyToken>^B03F5F7F11D50A3A$</PublicKeyToken> を使用します。For example to match all Visual Studio components and extensions, use <PublicKeyToken>^B03F5F7F11D50A3A$</PublicKeyToken>.

  • Source - 要素が定義されているソース ファイルのパス名で要素と一致します。Source - matches elements by the path name of the source file in which they are defined.

  • Attribute - 特定の属性のアタッチ先の要素と一致します。Attribute - matches elements to which a particular attribute is attached. 属性の完全名を指定し、名前の末尾に "Attribute" を含めます。Specify the full name of the attribute, including "Attribute" at the end of the name.

  • Function - 完全修飾名でプロシージャ、関数、またはメソッドに一致します。Function - matches procedures, functions, or methods by fully qualified name.

    関数名の一致Matching a function name

    正規表現が、名前空間、クラス名、メソッド名、およびパラメーター リストを含む関数の完全修飾名と一致する必要があります。Your regular expression must match the fully qualified name of the function, including namespace, class name, method name and parameter list. 次に例を示します。For example,

  • C# または Visual Basic: Fabrikam.Math.LocalMath.SquareRoot(double)C# or Visual Basic: Fabrikam.Math.LocalMath.SquareRoot(double)

  • C++: Fabrikam::Math::LocalMath::SquareRoot(double)C++: Fabrikam::Math::LocalMath::SquareRoot(double)

<Functions>  
  <Include>  
    <!-- Include methods in the Fabrikam namespace: -->  
    <Function>^Fabrikam\..*</Function>  
    <!-- Include all methods named EqualTo: -->  
    <Function>.*\.EqualTo\(.*</Function>  
  </Include>  
  <Exclude>  
    <!-- Exclude methods in a class or namespace named UnitTest: -->  
    <Function>.*\.UnitTest\..*</Function>  
  </Exclude>  
</Functions>  

テストの実行中に .runsettings ファイルを指定する方法How to specify .runsettings files while running tests

Visual Studio テストで runsettings をカスタマイズするにはTo customize runsettings in Visual Studio tests

[テスト][テストの設定][テスト設定ファイルの選択] の順に選択し、.runsettings ファイルを選択します。Choose Test, Test Settings, Select Test Settings File and select the .runsettings file. ファイルは、[テストの設定] メニューに表示され、選択したり取り消したりすることができます。The file appears on the Test Settings menu, and you can select or cancel it. 選択されている間、.runsettings ファイルは、[コード カバレッジの分析] を使用するたびに適用されます。While selected, your .runsettings file applies whenever you use Analyze Code Coverage.

コマンド ライン テストで実行設定をカスタマイズするにはTo customize run settings in a command line test

コマンド ラインからテストを実行するには、vstest.console.exe を使用します。To run tests from the command line, use vstest.console.exe. 設定ファイルは、このユーティリティのパラメーターです。The settings file is a parameter of this utility. 詳細については、「コマンド ラインからの VSTest.console の使用」を参照してください。For more information, see Using VSTest.console from the command line.

  1. Visual Studio 開発者コマンド プロンプトを起動します。Launch the Visual Studio Developer Command Prompt:

    Windows の [スタート] メニューで [すべてのプログラム][Microsoft Visual Studio][Visual Studio Tools][開発者コマンド プロンプト] の順に選択します。On Windows Start, choose All Programs, Microsoft Visual Studio, Visual Studio Tools, Developer Command Prompt.

  2. 実行します。Run:

    vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage /Settings:CodeCoverage.runsettings

ビルド定義で実行設定をカスタマイズするにはTo customize run settings in a build definition

チーム ビルドからコード カバレッジ データを取得できます。You can get code coverage data from a team build.

ビルド定義に実行設定を指定するSpecifying runsettings in a build definition

  1. .runsettings ファイルがチェックインされていることを確認します。Make sure your .runsettings file is checked in.

  2. チーム エクスプローラーで、[ビルド] を開き、ビルド定義を追加または編集します。In Team Explorer, open Builds, and then add or edit a build definition.

  3. [プロセス] ページで [自動テスト][テスト ソース][実行設定] の順に展開します。On the Process page, expand Automated Tests, Test Source, Run Settings. .runsettings ファイルを選択します。Select your .runsettings file.

    • しかし、 **[テスト ソース]* の代わりに [テスト アセンブリ] が表示されます。[実行設定] フィールドを設定しようとすると、.testsettings ファイルしか選択できません。But Test Assembly appears instead of Test Source. When I try to set the Run Settings field, I can only select .testsettings files.*

      [自動テスト] の下の [テスト アセンブリ] を選択し、行の末尾の [...] ボタンを選択します。Under Automated Tests, select Test Assembly, and choose [...] at the end of the line. [テストの実行の追加と編集] ダイアログ ボックスで、[テスト ランナー][Visual Studio テスト ランナー] に設定します。In the Add/Edit Test Run dialog box, set Test Runner to Visual Studio Test Runner.

    結果は、ビルド レポートの概要セクションに表示されます。The results are visible in the summary section of the build report.

サンプル .runsettings ファイルSample .runsettings file

このコードをコピーし、独自のニーズに合わせて編集します。Copy this code and edit it to suit your own needs. これは、既定の .runsettings ファイルです。This is the default .runsettings file.

(.runsettings ファイルのその他の用途については、「.runsettings ファイルを使用して単体テストを構成する」を参照してください。)(For other uses of the .runsettings file, see Configure unit tests by using a .runsettings file.)

<?xml version="1.0" encoding="utf-8"?>  
<!-- File name extension must be .runsettings -->  
<RunSettings>  
  <DataCollectionRunSettings>  
    <DataCollectors>  
      <DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">  
        <Configuration>  
          <CodeCoverage>  
<!--  
Additional paths to search for .pdb (symbol) files. Symbols must be found for modules to be instrumented.  
If .pdb files are in the same folder as the .dll or .exe files, they are automatically found. Otherwise, specify them here.  
Note that searching for symbols increases code coverage runtime. So keep this small and local.  
-->   
<!--             
            <SymbolSearchPaths>                
                   <Path>C:\Users\User\Documents\Visual Studio 2012\Projects\ProjectX\bin\Debug</Path>  
                   <Path>\\mybuildshare\builds\ProjectX</Path>  
            </SymbolSearchPaths>  
-->  

<!--  
About include/exclude lists:  
Empty "Include" clauses imply all; empty "Exclude" clauses imply none.  
Each element in the list is a regular expression (ECMAScript syntax). See http://msdn.microsoft.com/library/2k3te2cs.aspx.  
An item must first match at least one entry in the include list to be included.  
Included items must then not match any entries in the exclude list to remain included.  
-->  

            <!-- Match assembly file paths: -->  
            <ModulePaths>  
              <Include>  
                <ModulePath>.*\.dll$</ModulePath>  
                <ModulePath>.*\.exe$</ModulePath>  
              </Include>  
              <Exclude>  
                <ModulePath>.*CPPUnitTestFramework.*</ModulePath>  
              </Exclude>  
            </ModulePaths>  

            <!-- Match fully qualified names of functions: -->  
            <!-- (Use "\." to delimit namespaces in C# or Visual Basic, "::" in C++.)  -->  
            <Functions>  
              <Exclude>  
                <Function>^Fabrikam\.UnitTest\..*</Function>           
                <Function>^std::.*</Function>  
                <Function>^ATL::.*</Function>  
                <Function>.*::__GetTestMethodInfo.*</Function>  
                <Function>^Microsoft::VisualStudio::CppCodeCoverageFramework::.*</Function>  
                <Function>^Microsoft::VisualStudio::CppUnitTestFramework::.*</Function>  
              </Exclude>  
            </Functions>  

            <!-- Match attributes on any code element: -->  
            <Attributes>  
              <Exclude>  
                <!-- Don't forget "Attribute" at the end of the name -->  
                <Attribute>^System\.Diagnostics\.DebuggerHiddenAttribute$</Attribute>  
                <Attribute>^System\.Diagnostics\.DebuggerNonUserCodeAttribute$</Attribute>  
                <Attribute>^System\.Runtime\.CompilerServices.CompilerGeneratedAttribute$</Attribute>  
                <Attribute>^System\.CodeDom\.Compiler.GeneratedCodeAttribute$</Attribute>  
                <Attribute>^System\.Diagnostics\.CodeAnalysis.ExcludeFromCodeCoverageAttribute$</Attribute>  
              </Exclude>  
            </Attributes>  

            <!-- Match the path of the source files in which each method is defined: -->  
            <Sources>  
              <Exclude>  
                <Source>.*\\atlmfc\\.*</Source>  
                <Source>.*\\vctools\\.*</Source>  
                <Source>.*\\public\\sdk\\.*</Source>  
                <Source>.*\\microsoft sdks\\.*</Source>  
                <Source>.*\\vc\\include\\.*</Source>  
              </Exclude>  
            </Sources>  

            <!-- Match the company name property in the assembly: -->  
            <CompanyNames>  
              <Exclude>  
                <CompanyName>.*microsoft.*</CompanyName>  
              </Exclude>  
            </CompanyNames>  

            <!-- Match the public key token of a signed assembly: -->  
            <PublicKeyTokens>  
              <!-- Exclude Visual Studio extensions: -->  
              <Exclude>  
                <PublicKeyToken>^B77A5C561934E089$</PublicKeyToken>  
                <PublicKeyToken>^B03F5F7F11D50A3A$</PublicKeyToken>  
                <PublicKeyToken>^31BF3856AD364E35$</PublicKeyToken>  
                <PublicKeyToken>^89845DCD8080CC91$</PublicKeyToken>  
                <PublicKeyToken>^71E9BCE111E9429C$</PublicKeyToken>  
                <PublicKeyToken>^8F50407C4E9E73B6$</PublicKeyToken>  
                <PublicKeyToken>^E361AF139669C375$</PublicKeyToken>  
              </Exclude>  
            </PublicKeyTokens>  

            <!-- We recommend you do not change the following values: -->  
            <UseVerifiableInstrumentation>True</UseVerifiableInstrumentation>  
            <AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses>  
            <CollectFromChildProcesses>True</CollectFromChildProcesses>  
            <CollectAspDotNet>False</CollectAspDotNet>  

          </CodeCoverage>  
        </Configuration>  
      </DataCollector>  
    </DataCollectors>  
  </DataCollectionRunSettings>  
</RunSettings>  

関連項目See Also

コード カバレッジを使用した、テストされるプロジェクトのコード割合の確認 Using Code Coverage to Determine How Much Code is being Tested
コードの単体テストUnit Test Your Code