Share via


연습: 단위 테스트 생성 및 실행

이 연습에서는 Microsoft Visual Studio 2010을 사용하여 일련의 테스트를 만들고 실행하고 사용자 지정하는 과정을 단계별로 안내합니다. 개발 중인 C# 프로젝트로 시작하여 해당 코드를 실행해 보는 테스트를 만들어 테스트를 실행하고 결과를 검사합니다. 그런 다음 프로젝트 코드를 변경하고 테스트를 다시 실행할 수 있습니다.

참고

명령줄에서 테스트를 실행하는 방법에 대한 자세한 내용은 연습: 명령줄 테스트 유틸리티 사용을 참조하십시오.

이 연습에서는 다음 작업을 수행합니다.

  • 연습에서 사용할 "Bank Account" 프로젝트를 준비합니다.

  • 기존 프로젝트를 엽니다.

  • 공용 및 전용 메서드에 대한 단위 테스트를 만듭니다.

  • 코드를 대상으로 해당 테스트를 실행합니다.

  • 테스트에서 오류를 찾아 수정합니다.

  • 코드에서 오류를 찾아 수정합니다.

사전 요구 사항

연습 준비

연습을 준비하려면

  1. Visual Studio 2010 Premium을 엽니다.

  2. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.

    새 프로젝트 대화 상자가 나타납니다.

  3. 설치된 템플릿에서 **Visual C#**을 클릭합니다.

  4. 응용 프로그램 형식 목록에서 클래스 라이브러리를 클릭합니다.

  5. 이름 상자에 Bank를 입력한 다음 확인을 클릭합니다.

    참고

    "Bank"라는 이름이 이미 사용되고 있으면 프로젝트에 대해 다른 이름을 선택합니다.

    새 Bank 프로젝트가 만들어져 솔루션 탐색기에 표시되고 코드 편집기에 Class1.cs 파일이 열립니다.

    참고

    Class1.cs 파일이 코드 편집기에서 열리지 않으면 솔루션 탐색기에서 Class1.cs 파일을 두 번 클릭하여 엽니다.

  6. 단위 테스트를 만들기 위한 샘플 프로젝트에서 소스 코드를 복사합니다.

  7. Class1.cs의 원래 내용을 단위 테스트를 만들기 위한 샘플 프로젝트의 코드로 바꿉니다.

  8. 빌드 메뉴에서 솔루션 빌드를 클릭합니다.

이제 Bank라는 프로젝트가 준비되었습니다. 이 프로젝트에는 테스트할 소스 코드와 테스트에 사용할 도구가 들어 있습니다. Bank에 대한 네임스페이스 BankAccountNS에는 다음 절차에서 테스트할 메서드가 포함된 공용 클래스인 BankAccount가 있습니다.

단위 테스트 만들기

필수 구성 요소: 연습 준비 절차의 단계별 지침을 따릅니다.

단위 테스트를 만들려면

  1. Class1.cs 파일이 코드 편집기에서 열리지 않으면 솔루션 탐색기에서 Bank 프로젝트의 Class1.cs 파일을 두 번 클릭합니다.

  2. Class1.cs 파일의 BankAccount 클래스에서 Debit() 메서드로 스크롤합니다.

  3. Debit() 메서드를 마우스 오른쪽 단추로 클릭하고 단위 테스트 만들기를 선택합니다.

    단위 테스트 만들기 대화 상자가 표시됩니다.

    현재 선택 영역 아래에 BankAccount 클래스를 포함하는 어셈블리의 클래스 및 멤버 계층 구조가 트리 구조로 표시됩니다. 이 페이지를 사용하여 선택한 해당 멤버에 대한 단위 테스트를 생성하고, 생성된 단위 테스트를 저장할 테스트 프로젝트를 선택할 수 있습니다.

    트리 구조에서는 Debit() 메서드만 선택됩니다. 이 메서드를 선택한 상태로 두고 Credit() 메서드도 선택합니다.

  4. 출력 프로젝트에 대해 새 Visual C# 테스트 프로젝트 만들기를 선택합니다.

  5. 설정을 클릭합니다.

    테스트 생성 설정 대화 상자가 나타납니다. 이름 지정 설정에서 테스트 파일, 테스트 클래스 및 테스트 메서드가 생성될 때 이름을 지정하는 방식을 변경할 수 있습니다. 일반에서는 테스트 생성의 다른 부분을 변경할 수 있습니다. 이러한 설정의 기본값을 그대로 두고 확인을 클릭합니다.

  6. 단위 테스트 만들기 대화 상자에서 확인을 클릭합니다.

    새 테스트 프로젝트 대화 상자가 표시됩니다.

  7. 기본 이름을 지정한 다음 만들기를 클릭합니다.

    TestProject1이라는 프로젝트가 생성되어 솔루션 탐색기에 표시됩니다.

    테스트 클래스가 포함된 BankAccountTest.cs 파일이 TestProject1에 추가됩니다. 클래스는 TestContext 속성과 Debit()Credit() 메서드를 테스트하는 메서드로 채워집니다.

    참고

    모든 테스트 메서드에는 TestMethod() 특성이 자동으로 할당됩니다. 각 테스트는 테스트할 테스트 중인 코드의 단일 메서드에 해당합니다. 테스트 메서드는 TestClass() 특성이 할당되는 테스트 클래스에 포함됩니다.

  8. BankAccountTest.cs에서 테스트할 변수 값을 지정합니다. DebitTest 메서드로 스크롤하면 설정할 변수를 나타내는 개의 // TODO 줄이 표시됩니다.

  9. DebitTest 메서드에 사용할 값을 확인하려면 Class1.cs 파일을 열고 Main 메서드로 스크롤합니다. 고객 이름은 Mr. Bryan Walton으로 초기화되고 계정 잔고는 11.99로 초기화되고 Credit 메서드는 매개 변수 5.77과 함께 호출되며 Debit 메서드는 매개 변수 11.22와 함께 호출됩니다. 따라서 이 계정의 Balance11.99로 시작할 경우 11.22를 전달하는 동안 Debit 메서드를 호출하면 새 Balance0.77이 됩니다.

    참고

    이 연습의 뒷부분에서는 이 예상된 Balance 값(0.77)을 사용합니다.

  10. BankAccountTest.cs 파일에서 DebitTest 메서드로 스크롤합니다.

  11. 다음 값을 설정합니다.

    BankAccount target = new BankAccount("Mr. Bryan Walton", 11.99);
    double amount = 11.22;
    
  12. CreditTest 메서드에서 "Mr. Bryan Walton", 11.99)를 새 BankAccount에 추가합니다.

  13. BankAccountTest.cs 파일을 저장합니다.

Bank 프로젝트에 대한 테스트가 포함된 소스 코드 파일을 만들었습니다. 이제 Bank 프로젝트의 코드에 대한 BankAccountTest 클래스에서 테스트를 실행할 준비가 되었습니다.

단위 테스트 실행 및 사용자 지정

필수 구성 요소: 단위 테스트 만들기 절차의 단계별 지침을 따릅니다.

단위 테스트를 실행하고 사용자 지정하려면

  1. 테스트 메뉴에서 을 클릭하고 테스트 뷰를 선택합니다.

    테스트 뷰 창이 표시됩니다.

  2. DebitTest를 마우스 오른쪽 단추로 클릭하고 선택 영역 실행을 클릭합니다.

    테스트 결과 창이 아직 열려 있지 않으면 해당 창을 엽니다. DebitTest 테스트가 실행됩니다.

    테스트가 실행 중인 동안에는 테스트 결과 창의 결과 열에서 테스트 상태가 실행 중으로 표시됩니다. 테스트 실행이 끝나면 테스트 결과는 결과를 작성할 수 없음으로 변경됩니다.

  3. 테스트 결과 창에서 테스트를 나타내는 행을 마우스 오른쪽 단추로 클릭한 다음 테스트 결과 정보 보기를 클릭합니다.

  4. 테스트 결과 정보 페이지에 "Assert.Inconclusive이(가) 실패했습니다. 값을 반환하지 않는 메서드는 확인할 수 없습니다."라는 오류 메시지가 표시됩니다. 성공적인 테스트를 만들려면 먼저 이 Assert 문을 찾아서 평가합니다.

  5. Assert 문이 포함된 테스트 메서드를 찾으려면 BankAccountTest.cs 파일을 열고 DebitTest() 메서드로 스크롤합니다.

  6. Assert 문은 DebitTest 메서드의 마지막 줄입니다. 다음과 같이 표시됩니다.

    Assert.Inconclusive("A method that does not return a value cannot be verified.");
    

    이 Assert 문을 주석으로 처리합니다.

  7. 지금 테스트를 실행하면 결과는 성공이 되는데, 테스트한 것이 없기 때문입니다. 예상되는 결과를 테스트하는 코드를 추가해야 합니다. 다음 문을 DebitTest 메서드의 끝에 추가합니다.

    Assert.AreEqual((System.Convert.ToDouble(0.77)), target.Balance, 0.05);
    

    이 문은 예상되는 결과(0.77)를 BankAccount 클래스의 Balance 메서드를 호출한 실제 결과와 비교합니다. 두 값이 같지 않으면 AssertFalse를 반환하므로 테스트가 실패합니다.

    참고

    Assert 문에는 세 번째 매개 변수인 delta가 0.05 값으로 포함됩니다. delta 매개 변수는 Assert.AreEqual 메서드의 이 오버로드에 필요하며 Doubles와 같은 부동 소수점 형식에서 발생하는 반올림 오차를 보완합니다.

BankAccountTest 테스트 클래스에 대해 생성된 DebitTest 메서드를 실행하고 변경이 필요함을 확인한 다음 해당 사항을 변경했습니다. 이제 응용 프로그램에서 Debit 메서드의 정확성을 테스트할 준비가 되었습니다.

단위 테스트 실행 및 코드 수정

필수 구성 요소: 단위 테스트 실행 및 사용자 지정 절차의 단계별 지침을 따릅니다.

단위 테스트를 실행하고 코드를 수정하려면

  1. BankAccountTest.cs 파일에서 DebitTest() 메서드를 마우스 오른쪽 단추로 클릭한 다음 테스트 실행을 클릭하여 Debit 테스트를 다시 실행합니다.

    테스트 결과 창의 결과 열에서 테스트가 실행 중인 동안에는 테스트 상태가 실행 중으로 표시됩니다. 테스트 실행이 끝나면 테스트 결과가 실패로 변경됩니다.

  2. 테스트 결과 창에서 테스트를 나타내는 행을 마우스 오른쪽 단추로 클릭한 다음 테스트 결과 정보 보기를 클릭합니다.

    이렇게 하면 테스트 결과 정보 페이지가 열리고 "Assert.AreEqual이(가) 실패했습니다. 예상 값 <0.77>과 실제 값 <23.21>의 차이가 <0.05>보다 크지 않아야 합니다."라는 오류 메시지가 표시됩니다. 이러한 숫자는 수학 연산이 잘못되었음을 나타냅니다. BankAccountTest 클래스의 DebitTest 메서드는 BankAccount 클래스의 Debit 메서드를 테스트하므로, 먼저 Debit 메서드를 확인합니다.

  3. Class1.cs 파일을 열고 Debit 메서드로 스크롤합니다.

  4. 다음 할당문을 보십시오.

    m_balance += amount;
    

    이 할당문은 balance에 amount를 더하지만, 이 경우 Debit 메서드에서는 뺄셈이 실행되어야 합니다. 이 줄을 다음과 같이 변경합니다.

    m_balance -= amount;
    
  5. Debit 테스트를 다시 실행합니다.

    테스트 결과 창의 결과 열에는 DebitTest성공이 표시됩니다.

    참고

    테스트를 실행하면 프로젝트가 자동으로 빌드되므로 소스 코드를 변경한 다음에 테스트 프로젝트를 다시 빌드하지 않아도 됩니다.

작동하는 단위 테스트를 만들었으며 이 테스트를 통해 코드 오류를 찾아 수정했습니다.

전용 메서드에 대한 단위 테스트 만들기 및 실행

필수 구성 요소: 단위 테스트 실행 및 코드 수정 절차의 단계별 지침을 따릅니다.

전용 메서드에 대한 단위 테스트를 만들고 실행하려면

  1. Bank 프로젝트에서 Class1.cs 파일을 엽니다.

  2. FreezeAccount() 메서드를 마우스 오른쪽 단추로 클릭하고 단위 테스트 만들기를 선택합니다.

    그러면 단위 테스트 만들기 대화 상자가 표시됩니다.

    표시된 트리 구조에서 FreezeAccount() 메서드만 선택됩니다.

  3. (선택 사항) 필터를 클릭하고 public이 아닌 항목 표시의 선택을 취소합니다. FreezeAccount() 메서드가 BankAccount 클래스의 자식 메서드 목록에서 제거됩니다. 필터를 다시 클릭하고 public이 아닌 항목 표시를 선택하여 FreezeAccount() 메서드를 다시 표시합니다.

  4. FreezeAccount() 메서드가 선택되었는지 확인한 다음 확인을 클릭합니다.

    그러면 이름이 Bank.accessor인 새 전용 접근자 파일이 만들어집니다. 이 파일에는 테스트 과정에 BankAccount 클래스의 전용 메서드를 간접적으로 호출하는 데 사용되는 특수 접근자 메서드가 포함되어 있습니다. 솔루션 탐색기의 테스트 참조 폴더에 새 파일이 표시되는 것을 볼 수 있습니다.

  5. BankAccountTest.cs 파일을 열고 FreezeAccountTest() 메서드로 스크롤합니다.

  6. FreezeAccountTest() 메서드의 코드를 다음과 같이 변경합니다. 변경된 영역 또는 새 영역은 다음과 같이 나타납니다.

    public void FreezeAccountTest()
    {
        BankAccount_Accessor target = new BankAccount_Accessor("Mr. Bryan Walton", 11.99); // TODO: Initialize to an appropriate value
    target.FreezeAccount(); 
        // Assert.Inconclusive("A method that does not return a value cannot be verified.");
        
        bool creditAccount = false; // False means account could be credited: Fail test. 
        // Try to credit account
        try
        {
            target.Credit(1.00); 
        }
        catch (System.Exception)
        {
            // Threw exception. FreezeAccount worked correctly: Pass test. 
            creditAccount = true;
        }
        
        // Assert fails if 'creditAccount' condition is false. Fail test.
        Assert.IsTrue(creditAccount, "Was able to credit account.");
    }
    
  7. FreezeAccountTest 테스트를 실행합니다.

    테스트 결과 창의 결과 열에서 최종 테스트 상태가 성공으로 표시됩니다. 이는 FreezeAccount() 메서드를 호출하여 계정을 중지한 후 테스트에서 Credit() 메서드를 호출했기 때문에 예상된 결과입니다.

전용 메서드를 추가하고 이 메서드에 대한 새 단위 테스트를 만들고 테스트를 실행했습니다. balance 변수에 15.00 등의 다른 경계선 값을 사용하여 테스트를 추가로 실행할 수 있습니다.

다음 단계

어셈블리의 코드를 대상으로 테스트를 실행할 때 코드 검사 데이터를 수집하면 프로젝트 코드 중 테스트되고 있는 부분을 확인할 수 있습니다. 자세한 내용은 연습: 테스트 실행 및 코드 검사 보기를 참조하십시오.

Visual Studio 환경 대신 명령줄에서 테스트를 실행할 수도 있습니다. 자세한 내용은 연습: 명령줄 테스트 유틸리티 사용을 참조하십시오.

Visual Studio 2010 Ultimate를 사용하면 단위 테스트를 사용하여 스트레스 및 성능 문제를 격리하기 위한 부하 테스트를 만들 수 있습니다.

연습: 단위 테스트를 포함하는 부하 테스트 만들기 및 실행

참고 항목

작업

단위 테스트를 만들기 위한 샘플 프로젝트