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

단위 테스트와 같이 코딩 된 테스트 프로젝트의 코드 부분에서 실제로 테스트 되 확인 하려면 Visual Studio 코드 검사 기능을 사용할 수 있습니다.버그에 대해 효과적으로 보호 하려면 테스트를 실행 하거나 '코드에서 많은 부분을 가리는' 해야 합니다.

코드 검사 분석 관리 (CLI)와 비관리 (네이티브) 코드에 적용할 수 있습니다.

테스트 탐색기를 사용 하 여 테스트 메서드를 실행할 때 코드 검사 옵션입니다.결과 테이블에 각 어셈블리, 클래스 및 메서드 실행 된 코드의 비율을 보여 줍니다.또한 소스 편집기 테스트 코드 표시 합니다.

강조 표시된 코드 검사 결과

요구 사항

  • Visual Studio Ultimate, Visual Studio Premium

테스트 탐색기에서 단위 테스트에서 코드 검사 분석

  1. 테스트 메뉴를 선택 코드 검사 분석.

  2. 선을 실행 되었는지 보려면 코드 검사 강조 표시 아이콘코드 적용 범위 색상 표시.

    색상을 변경 하거나 굵게 사용 도구, 옵션, 환경, 글꼴 및 색, 설정 표시: 텍스트 편집기.아래 표시 항목, 검사 항목을 조정 합니다.

  3. 낮은 검사 결과 표시 하는 경우에 코드 부분 실행 되는 및를 표지에 더 많은 테스트를 작성 조사 합니다.개발 팀은 일반적으로 약 80%를 목표로 코드 검사 합니다.일부 경우에는 낮은 검사를 사용할 수 있습니다.예를 들어, 낮은 검사 표준 템플릿에서 일부 코드 생성 되는 허용 됩니다.

팁

정확한 결과 얻으려면:

  • 해당 컴파일러 최적화가 꺼져 있는지 확인 합니다.

    관리 되지 않는 (네이티브) 코드와 작업 하는 경우 디버그 빌드를 사용 합니다.

  • 각 어셈블리에 대 한.pdb (기호) 파일을 생성 되어 있는지 확인 합니다.

원하는 결과 얻지 못할 경우를 참조 하십시오. 코드 검사 문제 해결.

블록이 나 줄에 보고합니다.

코드 검사에서 계산 되어 블록.블록 진입 및 종료 지점과 정확히 하나의 코드 부분입니다.프로그램의 흐름 제어 블록을 통해 테스트를 실행 하는 동안 전달 하는 경우 해당 블록에 살펴본 것 처럼 계산 됩니다.블록 사용 횟수 결과에 영향을 주지 않습니다.

또한 측면에서 줄을 선택 하 여 표시 되는 결과 가질 수 있습니다 열 추가/제거 표 머리글에서.테스트 실행의 코드 줄에 있는 모든 코드 블록을 수행 하는 경우 한 줄으로 계산 됩니다.실행 된 일부 코드 블록 및 일부 되지 않은 줄을 포함 하는 경우에 부분 줄으로 계산 됩니다.

일부 사용자의 소스 코드에 표시 된 조각 크기 비율 보다 정확 하 게 일치 하기 때문에 줄의 개수를 선호 합니다.여러 줄 차지 하는 경우에 단일 블록으로 계산 포함 긴 블록을 계산 합니다.

코드 검사 결과 관리

코드 검사 결과 창에 일반적으로 가장 최근의 실행의 결과 보여 줍니다.결과는 테스트 데이터를 변경 하거나 일부 때마다 테스트를 실행 하는 경우 달라질 수 있습니다.

코드 검사 창의 보기 이전에 사용할 수 있습니다 결과 또는 다른 컴퓨터에서 얻은 결과입니다.

다른 테스트 데이터를 사용 하는 실행 예를 들어에서 여러 번 실행의 결과 병합할 수 있습니다.

  • 이전 결과 집합을 볼 수, 드롭 다운 메뉴에서를 선택 합니다.새로운 솔루션을 열 때 선택이 취소 되어 임시 목록 메뉴를 보여 줍니다.

  • 이전 세션에서 결과 보려면, 선택 코드 검사 결과 가져오는TestResults 폴더에 솔루션을 탐색 하 고.coverage 파일을 가져올.

    검사 강조.coverage 파일을 만든 후 소스 코드를 변경한 경우 올바르지 않을 수 있습니다.

  • 결과 텍스트로 읽을 수 있도록, 선택 내보내기 코드 검사 결과.다른 도구로 처리 하거나 쉽게 메일을 보낼 수 있습니다 읽을 수 있는.coveragexml 파일을 생성 합니다.

  • 결과 다른 사람에 게 보낼,.coverage 파일 만들거나 내보낸된.coveragexml 파일을 보냅니다.다음 파일을 가져올 수 있습니다.동일한 버전의 소스 코드가 있으면 검사 강조가 볼 수 있습니다.

다른 실행 결과 병합합니다.

일부 경우에는 테스트 데이터에 따라 코드에서 서로 다른 블록 사용 됩니다.따라서 여러 테스트 실행에서 결과 결합 할 수 있습니다.

예를 들어, 입력 "2"를 사용 하 여 테스트를 실행 하면 하면 50%의 특정 함수 포함 되는지 찾는 것입니다."-2" 입력을 두 번 테스트를 실행할 때 함수는 다른 50% 포함 되는지 보기 색 검사를 참조 하십시오.이제는 두 가지 테스트 실행에서 결과 병합 하 고 100% 함수의 다루었습니다 보고서 및 보기 색 범위를 표시 합니다.

사용 코드 검사 창의 병합 단추 아이콘병합 된 코드 검사 결과 이 작업을 수행 합니다.최근 실행 되거나 가져온된 결과의 조합을 선택할 수 있습니다.내보낸된 결과 결합 하려는 경우 먼저 가져와야 합니다.

사용 내보내기 코드 검사 결과 병합 작업의 결과 저장할 수 있습니다.

Dd537628.collapse_all(ko-kr,VS.110).gif병합 제한 사항

  • 다른 버전의 코드 검사 데이터를 병합 하는 경우 결과 개별적으로 표시 됩니다 있지만 결합 되지.완벽 하 게 결합 된 결과 얻으려면 같은 빌드의 테스트 데이터를 변경 하는 코드를 사용 합니다.

  • 내보낸 및 가져온 다음 결과 파일을 병합 하는 경우 결과 볼 수만 있습니다 선, 블록에서 없습니다.사용 된 열 추가/제거 줄 데이터를 표시 하는 명령입니다.

  • ASP.NET 프로젝트의 테스트 결과 병합 하는 경우 별도 테스트 결과 표시 되지만 결합 되지.이 ASP.NET 아티팩트에 자체에 적용 됩니다: 다른 어셈블리 결합의 결과입니다.

코드 검사 결과에서 요소를 제외합니다.

검사 점수, 예를 들어 텍스트 템플릿에서 코드를 생성 하는 경우 코드에서 특정 요소를 제외 시킬 수 있습니다.특성 추가 System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage 에 다음과 같은 코드 요소: 클래스, 구조체, 메서드, 속성, 속성 setter 또는 getter, 이벤트.클래스를 제외한 클래스의 파생된 클래스 제외 하지 참고 합니다.

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

using System.Diagnostics.CodeAnalysis; 
...
public class ExampleClass1
{ 
    [ExcludeFromCodeCoverage]
    void ExampleMethod() {...}

    [ExcludeFromCodeCoverage] // exclude property
    int ExampleProperty1 
    { get {...} set{...}}

    int ExampleProperty2
    {
        get
        {
            ...
        }
        [ExcludeFromCodeCoverage] // exclude setter
        set
        {
            ...
        }
    }
 
}
[ExcludeFromCodeCoverage]
class ExampleClass2 { ... }
Imports System.Diagnostics.CodeAnalysis


Class ExampleClass1        
    <ExcludeFromCodeCoverage()>
    Public Sub ExampleSub1()
        ...
    End Sub

    ' Exclude property
    < ExcludeFromCodeCoverage()>
    Property ExampleProperty1 As Integer
        ...
    End Property

    ' Exclude setter
    Property ExampleProperty2 As Integer
        Get
            ...
        End Get
        <ExcludeFromCodeCoverage()>
        Set(ByVal value As Integer)
            ...
        End Set
    End Property
End Class

<ExcludeFromCodeCoverage()>
Class ExampleClass2
...
End Class
// A .cpp file compiled as managed (CLI) code.
using namespace System::Diagnostics::CodeAnalysis;
...
public ref class ExampleClass1
{
  public:
    [ExcludeFromCodeCoverage]
    void ExampleFunction1() { ... }
    
    [ExcludeFromCodeCoverage]
    property int ExampleProperty2 {...}

    property int ExampleProperty2 {
      int get() { ... }
     [ExcludeFromCodeCoverage]
      void set(int value) { ...  }
   }

}

[ExcludeFromCodeCoverage]
public ref class ExampleClass2
{ ... }

Dd537628.collapse_all(ko-kr,VS.110).gif네이티브 c + + 코드에서 요소를 제외합니다.

C + + 코드에서 관리 되지 않는 (네이티브) 요소를 제외 하려면:

#include <CodeCoverage\CodeCoverage.h>
...

// Exclusions must be compiled as unmanaged (native):
#pragma managed(push, off)

// Exclude a particular function:
ExcludeFromCodeCoverage(Exclusion1, L"MyNamespace::MyClass::MyFunction");

// Exclude all the functions in a particular class:
ExcludeFromCodeCoverage(Exclusion2, L"MyNamespace::MyClass2::*");

// Exclude all the functions generated from a particular template: 
ExcludeFromCodeCoverage(Exclusion3, L"*::MyFunction<*>"); 


// Exclude all the code from a particular .cpp file:
ExcludeSourceFromCodeCoverage(Exclusion4, L"*\\unittest1.cpp");

// After setting exclusions, restore the previous managed/unmanaged state:
#pragma managed(pop)

다음 매크로 사용 하십시오.

-
ExcludeFromCodeCoverage(ExclusionName, L"FunctionName");

ExcludeSourceFromCodeCoverage(ExclusionName, L"원본 파일 경로");
  • ExclusionName 는 고유한 이름입니다.

  • FunctionName 정규화 된 함수 이름입니다.와일드 카드를 포함할 수 있습니다.예를 들어, 클래스의 모든 함수를 제외 하려면 쓰기MyNamespace::MyClass::*

  • 원본 파일 경로 로컬 또는.cpp 파일의 UNC 경로입니다.와일드 카드를 포함할 수 있습니다.다음 예제에서는 특정 디렉터리의 모든 파일을 제외 합니다.\\MyComputer\Source\UnitTests\*.cpp

  • #include <CodeCoverage\CodeCoverage.h>

  • 전역 네임 스페이스, 클래스 또는 네임 스페이스 내에서 제외 매크로 호출을 배치 합니다.

  • 제외 된 단위 테스트 코드 파일 또는 응용 프로그램 코드 파일을 배치할 수 있습니다.

  • 제외 된 관리 되지 않는 (네이티브) 코드를 컴파일러 옵션을 설정 하거나 사용 하 여 컴파일해야 합니다. #pragma managed(off).

[!참고]

제외 함수에서 C + + CLI 코드에서 특성을 적용 [System::Diagnostics::CodeAnalysis::ExcludeFromCodeCoverage] 함수입니다.이 경우 C#와 동일합니다.

Dd537628.collapse_all(ko-kr,VS.110).gif포함 또는 제외 추가 요소

코드 검사 분석에는 로드 된 및.pdb 파일이.dll 또는.exe 파일과 같은 디렉터리에 사용할 수 있는 어셈블리에만 수행 됩니다.따라서 일부 경우에 해당 하는.pdb 파일의 복사본을 가져오면이 포함 된 어셈블리 집합을 확장할 수 있습니다.

더 많은 제어를 통해 어셈블리와 요소에 대 한 코드 검사 분석.runsettings 파일을 작성 하 여 선택할 발휘할 수 있습니다.예를 들어 해당 클래스에 특성을 추가 하지 않고도 특정 종류의 어셈블리를 제외할 수 있습니다.자세한 내용은 코드 검사 분석 사용자 지정을 참조하십시오.

빌드 서비스에서 코드 검사 분석

코드에서 확인 하는 경우 빌드 서버에서 다른 팀 멤버의 다른 테스트와 함께 테스트를 실행 합니다.(이미이 설정 되지 않은 경우를 참조 하십시오. 빌드 프로세스에서 테스트 실행.) 검사의 가장 최신 상태이 고 포괄적인 그림을 전체 프로젝트에서 얻을 수 있으므로 코드 검사에서 빌드 서비스를 분석 하는 것이 유용 합니다.또한 자동화 된 시스템 테스트를 개발 컴퓨터에서 실행 하지 않는 다른 코딩 된 테스트가 포함 됩니다.

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

  2. 프로세스 페이지에서 확장 자동화 된 테스트, 테스트 소스, 실행 설정.설정 형식 실행 설정 파일의코드 검사가 활성화.

    테스트 소스 정의가 두 개 이상 있는 경우 각각에 대해이 단계를 반복 합니다.

    • 라는 필드가 있지만 실행 설정 파일 형식.

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

코드 검사를 위한 빌드 정의 설정 중

빌드를 실행 한 후 코드 검사 결과 테스트 실행에 연결 된 및 빌드 요약을 표시 합니다.

명령줄에서 코드 검사 분석

명령줄에서 테스트를 실행 하려면 vstest.console.exe를 사용 합니다.코드 검사는이 유틸리티의 옵션입니다.자세한 내용은 VSTest.Console.exe 명령줄 옵션을 참조하십시오.

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

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

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

    vstest.console.exe MyTestAssembly.dll /EnableCodeCoverage

문제 해결

코드 검사 결과 표시 되지 않는 경우를 참조 하십시오. 코드 검사 문제 해결.

외부 리소스

Dd537628.collapse_all(ko-kr,VS.110).gif지침

Visual Studio 2012 2 장 연속 배달 테스트: 단위 테스트: 내부 테스트

참고 항목

개념

코드 검사 분석 사용자 지정

코드 검사 문제 해결

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