다음을 통해 공유


워크스루: 사용 기반 생성을 위한 기능을 사용하여 테스트 우선 개발

이 항목에서는 테스트 우선 개발을 지원하는 사용량 생성 기능을 사용하는 방법을 보여 줍니다.

테스트 우선 개발 은 먼저 제품 사양에 따라 단위 테스트를 작성한 다음 테스트에 성공하는 데 필요한 소스 코드를 작성하는 소프트웨어 디자인에 대한 접근 방식입니다. Visual Studio는 테스트 사례에서 처음 참조할 때 새 형식 및 멤버를 정의하기 전에 소스 코드에서 새 형식 및 멤버를 생성하여 테스트 우선 개발을 지원합니다.

Visual Studio는 워크플로 중단을 최소화하면서 새 형식 및 멤버를 생성합니다. 코드에서 현재 위치를 그대로 두지 않고 형식, 메서드, 속성, 필드 또는 생성자에 대한 스텁을 만들 수 있습니다. 형식 생성 옵션을 지정하는 대화 상자를 열면 대화 상자가 닫히면 포커스가 현재 열려 있는 파일로 즉시 돌아갑니다.

사용량 생성 기능은 Visual Studio와 통합되는 테스트 프레임워크에서 사용할 수 있습니다. 이 항목에서는 Microsoft 단위 테스트 프레임워크를 설명합니다.

비고

이 문서의 지침은 Visual Studio에서 사용할 수 있는 IDE(대화형 개발 환경)의 최신 버전을 보여 줍니다. 컴퓨터에 일부 사용자 인터페이스 요소에 대한 다른 이름 또는 위치가 표시될 수 있습니다. 다른 버전의 Visual Studio 또는 다른 환경 설정을 사용할 수 있습니다. 자세한 내용은 IDE 개인 설정참조하세요.

Windows 클래스 라이브러리 프로젝트 및 테스트 프로젝트 만들기

  1. C# 또는 Visual Basic에서 새 Windows 클래스 라이브러리 프로젝트를 만듭니다. GFUDemo_VB 사용 중인 언어에 따라 이름을 지정하거나 GFUDemo_CS이름을 지정합니다.

  2. 솔루션 탐색기에서 맨 위에 있는 솔루션 아이콘을 마우스 오른쪽 단추로 클릭하고새 프로젝트추가>를 선택합니다.

  3. 단위 테스트 프로젝트(.NET Framework) 프로젝트를 만듭니다.

클래스 라이브러리 프로젝트에 대한 참조 추가

  1. 솔루션 탐색기의 단위 테스트 프로젝트에서 참조 항목을 마우스 오른쪽 단추로 클릭하고 참조 추가를 선택합니다.

  2. 참조 관리자 대화 상자에서 프로젝트를 선택한 다음 클래스 라이브러리 프로젝트를 선택합니다.

  3. 확인을 선택하여 참조 관리자 대화 상자를 닫습니다.

  4. 솔루션을 저장합니다. 이제 테스트 작성을 시작할 준비가 되었습니다.

단위 테스트에서 새 클래스 생성

  1. 테스트 프로젝트에는 UnitTest1이라는 파일이 포함되어 있습니다. 솔루션 탐색기에서 이 파일을 두 번 클릭하여 코드 편집기에서 엽니다. 테스트 클래스 및 테스트 메서드가 생성되었습니다.

  2. 클래스 UnitTest1 에 대한 선언을 찾아 이름을 .로 AutomobileTest바꿉니다.

    비고

    IntelliSense는 이제 IntelliSense 문 완성을 위한 두 가지 대안인 완성 모드제안 모드를 제공합니다. 클래스와 멤버가 정의되기 전에 사용되는 상황에 제안 모드를 사용합니다. IntelliSense 창이 열려 있는 경우 Ctrl+Alt+스페이스를 눌러 완성 모드와 제안 모드 간에 전환할 수 있습니다. 자세한 내용은 IntelliSense 사용을 참조하세요. 제안 모드는 다음 단계에서 Automobile을(를) 입력할 때 도움이 됩니다.

  3. TestMethod1() 메서드를 찾아 DefaultAutomobileIsInitializedCorrectly()로 이름을 바꿉니다. 이 메서드 내에서 다음 스크린샷과 같이 이름이 지정된 Automobile클래스의 새 인스턴스를 만듭니다. 컴파일 타임 오류를 나타내는 물결선 밑줄이 나타나고, 왼쪽 여백 또는 물결표 바로 아래에 마우스로 가리키면 빠른 작업 오류 전구가 나타납니다.

    Visual Basic의 빠른 작업

    C의 빠른 작업#

  4. 빠른 작업 전구를 선택하거나 클릭합니다. 형식 Automobile 이 정의되지 않았다는 오류 메시지가 표시됩니다. 또한 몇 가지 솔루션이 제공됩니다.

  5. 새 형식 생성을 클릭하여 형식 생성 대화 상자를 엽니다. 이 대화 상자는 다른 프로젝트에서 형식을 생성하는 옵션을 제공합니다.

  6. 프로젝트 목록에서 GFUDemo_VB 또는 GFUDemo_CS 클릭하여 Visual Studio에 테스트 프로젝트 대신 클래스 라이브러리 프로젝트에 파일을 추가하도록 지시합니다. 아직 선택하지 않은 경우 새 파일 만들기 를 선택하고 이름을 Automobile.cs 또는 Automobile.vb.

    새 형식 생성 대화 상자

  7. 확인을 클릭하여 대화 상자를 닫고 새 파일을 만듭니다.

  8. 솔루션 탐색기에서 GFUDemo_VB 또는 GFUDemo_CS 프로젝트 노드를 확인하여 새 Automobile.vb 또는 Automobile.cs 파일이 있는지 확인합니다. 코드 편집기에서 AutomobileTest.DefaultAutomobileIsInitializedCorrectly포커스는 계속 진행되므로 최소한의 중단으로 테스트를 계속 작성할 수 있습니다.

속성 스텁 생성

제품 사양에서 Automobile 클래스가 ModelTopSpeed라는 이름의 두 개의 public 속성을 가지고 있다고 가정합니다. 이러한 속성은 기본값 "Not specified"-1 기본 생성자를 사용하여 초기화해야 합니다. 다음 단위 테스트에서는 기본 생성자가 속성을 올바른 기본값으로 설정하는지 확인합니다.

  1. 테스트 메서드에 다음 코드 DefaultAutomobileIsInitializedCorrectly 줄을 추가합니다.

    Assert.IsTrue((myAuto.Model == "Not specified") && (myAuto.TopSpeed == -1));
    
  2. 코드는 Automobile에서 두 개의 정의되지 않은 속성을 참조하므로 ModelTopSpeed 아래에 물결선이 나타납니다. 마우스를 Model 위에 올리고 "빠른 작업" 오류 전구를 선택한 다음 'Automobile.Model' 속성 생성을 선택합니다.

  3. 동일한 방식으로 속성에 TopSpeed 대한 속성 스텁을 생성합니다.

    클래스에서 Automobile 새 속성의 형식은 컨텍스트에서 올바르게 유추됩니다.

새 생성자에 대한 스텁 생성

이제 ModelTopSpeed 속성을 초기화하기 위한 생성자 스텁을 생성하는 테스트 메서드를 만듭니다. 나중에 테스트를 완료하기 위해 코드를 더 추가합니다.

  1. 클래스에 다음 추가 테스트 메서드를 추가합니다 AutomobileTest .

    [TestMethod]
    public void AutomobileWithModelNameCanStart()
    {
        string model = "Contoso";
        int topSpeed = 199;
        Automobile myAuto = new Automobile(model, topSpeed);
    }
    
  2. 빨간색 물결선 아래에서 빠른 작업 오류 전구를 클릭한 다음 '자동차'에서 생성자 생성을 클릭합니다.

    Automobile 클래스 파일에서 새 생성자는 생성자 호출에 사용되는 지역 변수의 이름을 검사하고, 클래스에서 Automobile 이름이 같은 속성을 찾았으며, 생성자 본문에 인수 값을 Model 저장하기 위한 코드를 제공했습니다TopSpeed.

  3. 새 생성자를 생성한 후, 기본 생성자에 대한 DefaultAutomobileIsInitializedCorrectly 안의 호출 아래에 물결선 밑줄이 나타납니다. 오류 메시지는 클래스에 Automobile 인수 0을 사용하는 생성자가 없음을 나타냅니다. 매개 변수가 없는 명시적 기본 생성자를 생성하려면 빠른 작업 오류 전구를 클릭한 다음 '자동차'에서 생성자 생성을 클릭합니다.

메서드에 대한 스텁 생성

조건 사양에 따르면 새로운 AutomobileIsRunning 상태로 전환할 수 있으며, 이는 해당 ModelTopSpeed 속성이 기본값이 아닌 다른 값으로 설정되었을 때 가능하다고 가정합니다.

  1. 메서드에 다음 줄을 추가합니다 AutomobileWithModelNameCanStart .

    myAuto.Start();
    Assert.IsTrue(myAuto.IsRunning == true);
    
  2. 메서드 호출에 대한 myAuto.Start빠른 작업 오류 전구를 클릭한 다음 'Automobile.Start' 메서드 생성을 클릭합니다.

  3. 속성에 대한 IsRunning빠른 작업 전구를 클릭한 다음 'Automobile.IsRunning' 속성 생성을 클릭합니다.

    이제 클래스에 Automobile 이름이 지정된 메서드와 이름이 Start() 지정된 IsRunning속성이 포함됩니다.

테스트 실행

  1. 테스트 메뉴에서모든 테스트실행을> 선택합니다.

    모든 테스트실행> 명령은 현재 솔루션에 대해 작성된 모든 테스트 프레임워크에서 모든 테스트를 실행합니다. 이 경우 두 가지 테스트가 있으며 둘 다 예상대로 실패합니다. DefaultAutomobileIsInitializedCorrectly 테스트는 Assert.IsTrue 조건이 False를 반환하기 때문에 실패합니다. Automobile 테스트가 실패하는 이유는 Automobile 클래스의 Start 메서드가 예외를 발생시키기 때문입니다.

    테스트 결과 창은 다음 그림에 나와 있습니다.

    실패한 테스트 결과

  2. 테스트 결과 창에서 각 테스트 결과 행을 두 번 클릭하여 각 테스트의 위치로 이동합니다.

소스 코드 구현

  1. 다음 코드를 기본 생성자에 추가하여 Model, TopSpeed, 및 IsRunning 속성이 각각 올바른 기본값 "Not specified", -1, 및 False (또는 C#의 경우 false)으로 초기화되도록 합니다.

    public Automobile()
    {
        this.Model = "Not specified";
        this.TopSpeed = -1;
        this.IsRunning = true;
    }
    
  2. 메서드가 Start 호출될 때, Model 또는 TopSpeed 속성이 기본값 이외의 값으로 설정된 경우에만 IsRunning 플래그를 true로 설정해야 합니다. NotImplementedException 메서드 본문에서 제거하고 다음 코드를 추가합니다.

    public void Start()
    {
        if (this.Model != "Not specified" || this.TopSpeed != -1)
            this.IsRunning = true;
        else
            this.IsRunning = false;
    }
    

테스트를 다시 실행합니다.

  • 테스트 메뉴에서 실행을 가리킨 다음 모든 테스트를 클릭합니다.

    이번에는 테스트가 통과합니다. 테스트 결과 창은 다음 그림에 나와 있습니다.

    통과한 테스트 결과