Share via


코드 검사 분석 사용자 지정

기본적으로 Visual Studio 2012 코드 검사 도구는 단위를 테스트 하는 동안 로드 되는 모든 솔루션 어셈블리 (.exe/.dll)를 분석 합니다.잘 대부분의 시간 작동 하기 때문에이 기본값을 유지 하는 것이 좋습니다.자세한 내용은 코드 검사를 사용하여 테스트할 코드 범위 결정을 참조하십시오.

코드 검사 동작을 사용자 지정 하기 전에 몇 가지 대안을 고려해 야 합니다.

  • 테스트 코드에서 코드 검사 결과 제외 하 고 응용 프로그램 코드만 포함 하려는 경우

    추가 된 ExcludeFromCodeCoverage Attribute 테스트 클래스에 있습니다.

  • 솔루션의 일부가 아닌 어셈블리를 포함 하려면.

    이러한 어셈블리에 대 한.pdb 파일을 구하여 어셈블리.dll 파일과 같은 폴더로 복사 하십시오.

코드 검사 동작을 사용자 지정 하려면 복사는 샘플에서는이 항목의 끝에 파일 확장명.runsettings를 사용 하 여 솔루션에 추가 합니다.자신의 필요에 맞는 다음 편집의 테스트 메뉴를 선택 테스트 설정, 테스트 설정 선택 파일.이 항목의 나머지 부분은이 절차에 자세히 설명합니다.

.Runsettings 파일

고급 코드 검사 설정은.runsettings 파일에 지정 됩니다.이 단위 테스트 도구에서 사용 하는 구성 파일입니다.복사 하는 것이 좋습니다는 샘플에서는이 항목의 끝에 하 고 자신의 필요에 맞게 편집 합니다.

  • Visual Studio 2010에는 데 사용 되는.testsettings 파일 내용

    Visual Studio 2010에서.testsettings 파일을 MSTest framework를 기반으로 단위 테스트에만 적용 됩니다.2012에서 Visual Studio 테스트 도구 뿐만 Mstest를 하지만 NUnit xUnit 등 다른 프레임 워크를 적용합니다.net을 입력합니다..Testsettings 파일에서 작동 하지 않습니다..Runsettings 파일 테스트 도구에서 모든 테스트 프레임 워크와 작동 하는 방법 사용자 지정 하도록 되어 있습니다.

코드 검사를 사용자 지정 하려면.runsettings 파일을 솔루션에 추가 해야 합니다.

  1. .Xml 파일 확장명을 가진 솔루션 항목으로 추가할 .runsettings.

    솔루션 탐색기에서 솔루션을 바로 가기 메뉴에서 선택 추가, 새 항목를 선택 하 고 XML 파일.같은 끝을 이름으로 파일을 저장 합니다. CodeCoverage.runsettings

  2. 샘플에 있는이 항목의 끝에 지정 된 콘텐츠를 추가 하 고 사용자의 요구에 다음 단원에서 설명한 대로 지정 합니다.

  3. 테스트 메뉴에서 선택 테스트 설정, 테스트 설정 파일을 선택 및 파일을 선택 합니다.

  4. 이렇게 하면 실행할 때 테스트, 코드 검사 분석이 .runsettings 파일 동작을 제어 합니다.

  5. 사용자 지정 설정 켜기 및 끄기, 해제 또는 파일을 선택 하 여 테스트, 테스트 설정 메뉴.

사용자 지정 설정 파일로 설정 메뉴 테스트

단위 테스트의 다른 측면에서 같은.runsettings 파일을 구성할 수 있습니다.자세한 내용은 단위 테스트를 사용하여 코드 확인을 참조하십시오.

JJ159530.collapse_all(ko-kr,VS.110).gif기호 검색 경로 지정합니다.

코드 검사가 포함 되어야 하는 어셈블리에 대 한 기호 (.pdb 파일)이 필요 합니다.솔루션에서 빌드한 어셈블리에 대 한 기호 파일이 함께 이진 파일을 일반적으로 위치한 및 코드 검사를 자동으로 작동 합니다.하지만 일부 경우에 참조 된 어셈블리에 코드 검사 분석을 포함 시킬 수도 있습니다.이러한 경우.pdb 파일의 바이너리에 인접 한이 아닐 수도 있지만.runsettings 파일에서 기호 검색 경로 지정할 수 있습니다.

         <SymbolSearchPaths>              
               <Path>\\mybuildshare\builds\ProjectX</Path>
               <!--More paths if required-->
         </SymbolSearchPaths>
주의 정보주의

기호 확인에 시간이 걸릴 수 있습니다 특히 원격 파일 위치와 많은 수의 어셈블리를 사용 하는 경우.따라서 원격.pdb 파일을 이진 (.dll 및.exe) 파일과 같은 로컬 위치에 복사 하십시오.

JJ159530.collapse_all(ko-kr,VS.110).gif제외 및 포함

코드 검사 분석에서 지정한 어셈블리를 제외할 수 있습니다.예를 들면 다음과 같습니다.

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

대 안으로 포함 될 수 있는 어셈블리를 지정할 수 있습니다.이 방법은 단점이 더 많은 어셈블리를 솔루션에 추가 되 면 목록에 추가할 기억할 필요가:

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

경우 <Include> 코드 검사 처리 로드 되 고에 있는 모든 어셈블리 (.dll 및.exe 파일)을 포함 하 고 비어 있는 .pdb 파일 찾을 수 있습니다, 절과 일치 하는 항목을 제외 하 고는 <Exclude> 목록입니다.

Include보다 먼저 처리 Exclude.

JJ159530.collapse_all(ko-kr,VS.110).gif정규식

노드 정규식 제외 및 포함 됩니다.자세한 내용은 Visual Studio에서 정규식 사용을 참조하십시오.정규식 와일드 카드 수 없습니다.특히 다음과 같습니다.

  1. . * 문자열의 모든 문자를 찾습니다.

  2. \. 일치 점 ".")

  3. \ (\) 괄호 "()"와 일치

  4. \\ 파일 경로 구분 기호 "\"와 일치

  5. ^ 일치 문자열의 시작

  6. $ 문자열의 끝과 일치

일치 하는 모든 대/소문자 구분입니다.

예를 들면 다음과 같습니다.

<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>
주의 정보주의

그런 다음 이스케이프 되지 않은 고 짝이 맞지 않는 괄호 등과 같은 정규식에 오류가 있을 경우 코드 검사 분석이 실행 되지 않습니다.

JJ159530.collapse_all(ko-kr,VS.110).gif포함 하거나 요소를 제외 하는 다른 방법

참조는 샘플에서는이 항목의 끝에 예입니다.

  • ModulePath– 어셈블리가 어셈블리 파일 경로로 지정 됩니다.

  • CompanyName-회사 특성으로 어셈블리를 찾습니다.

  • PublicKeyToken-일치 하는 공개 키 토큰으로 어셈블리를 서명 합니다.예를 들어, 모든 Visual Studio 구성 요소 및 확장에 맞게 사용 <PublicKeyToken>^B03F5F7F11D50A3A$</PublicKeyToken>.

  • Source-정의 된 소스 파일의 경로 이름으로 요소를 찾습니다.

  • Attribute-특정 속성이 연결 된 요소와 일치 합니다.이름 끝에 "Attribute"를 포함 하는 특성의 전체 이름을 지정 합니다.

  • Function-정규화 된 이름으로 프로시저, 함수 또는 메서드를 찾습니다.

함수 이름과 일치 하는

정규식 네임 스페이스, 클래스 이름, 메서드 이름 및 매개 변수 목록을 포함 하 여 함수의 정규화 된 이름에 일치 해야 합니다.다음 예제를 참조하십시오.

  • C# 또는 Visual Basic.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 파일을 지정 하는 방법

JJ159530.collapse_all(ko-kr,VS.110).gifVisual Studio 테스트에서 runsettings 사용자 지정 하려면

선택 테스트, 테스트 설정, 테스트 설정 파일을 선택 및.runsettings 파일을 선택 합니다.테스트 설정 메뉴에서 파일을 표시 하 고 선택 하거나 취소할 수 있습니다.사용 될 때마다.runsettings 파일을 선택 하는 동안 적용 됩니다 코드 검사 분석.

JJ159530.collapse_all(ko-kr,VS.110).gif명령줄 테스트에서 실행된 설정을 사용자 지정 하려면

명령줄에서 테스트를 실행 하려면 vstest.console.exe를 사용 합니다.설정 파일에이 유틸리티의 매개 변수입니다.자세한 내용은 명령줄에서 VSTest.Console 사용을 참조하십시오.

  1. Visual Studio 개발자가 명령 프롬프트를 시작 합니다.

    Windows에서 시작, 선택 모든 프로그램, Microsoft Visual Studio, Visual Studio 도구, 개발자 명령 프롬프트.

  2. 다음 중 하나를 실행 하십시오.

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

JJ159530.collapse_all(ko-kr,VS.110).gif실행된 설정에서 빌드 정의 사용자 지정 하려면

팀 빌드에서 코드 검사 데이터를 가져올 수 있습니다.

빌드 정의에 runsettings 지정 중

  1. .Runsettings 파일을 체크 인 하십시오.

  2. 팀 탐색기에서 빌드를 연 다음 빌드 정의를 추가하거나 편집합니다.

  3. 프로세스 페이지에서 확장 자동화 된 테스트, 테스트 소스, 실행 설정.선택 하 여 .runsettings 파일입니다.

    • 하지만 테스트 어셈블리 대신 나타납니다 테스트 소스.설정 하려고는 실행 설정 필드만.testsettings 파일 선택한 수 있습니다.

      아래 자동화 된 테스트, 테스트 어셈블리, 선택 하 고 [...] 줄 끝에.에 테스트를 실행 하는 추가/편집 대화 상자에서 설정 Test RunnerVisual Studio Test Runner.

결과 빌드 보고서의 요약 섹션에 표시 됩니다.

샘플.runsettings 파일

이 코드를 복사 하 고 자신의 필요에 맞게 편집 합니다.이 기본.runsettings 파일입니다.

<?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 https://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>

참고 항목

개념

단위 테스트를 사용하여 코드 확인

기타 리소스

코드 검사를 사용하여 테스트할 코드 범위 결정