단위 테스트 분석

단위 테스트를 만들면 몇 개의 파일이 솔루션에 추가됩니다. 이 항목에서는 예제 단위 테스트를 사용하여 가장 일반적인 파일을 알아봅니다. 이 예제는 연습: 단위 테스트 생성 및 실행 항목에 나와 있는 예제입니다.

단위 테스트 파일의 요소

단위 테스트를 만들면 테스트하는 각 클래스에 대해 별도의 단위 테스트 파일이 만들어집니다. 각 단위 테스트 파일에는 테스트할 각 메서드에 대한 테스트 메서드가 들어 있습니다. 이 예제에서는 테스트하는 두 메서드가 모두 동일한 클래스에 속해 있습니다. 따라서 테스트 클래스 파일이 BankAccountTest.cs 하나만 있습니다.

파일의 최상위 섹션

다음 그림에서는 네임스페이스에 대한 참조, TestClassAttribute 및 TestContext 클래스를 포함한 처음 몇 줄의 코드를 보여 줍니다. 코드 샘플이 필요한 경우 연습을 참조하십시오.

샘플 단위 테스트 파일의 위쪽 섹션

  1. Microsoft.VisualStudio.TestTools.UnitTesting: 단위 테스트를 만들면 Microsoft.VisualStudio.TestTools.UnitTesting 네임스페이스에 대한 참조가 테스트 프로젝트에 추가되고 이 네임스페이스가 단위 테스트 파일 맨 위의 using 문에 포함됩니다. 이 네임스페이스에는 다음을 포함하여 단위 테스트에 유용한 여러 클래스가 있습니다.

    • 단위 테스트의 조건을 확인하는 데 사용할 수 있는 Assert 클래스

    • 단위 테스트가 실행되기 전이나 후에 특정 시작 및 종료 상태를 확인하기 위한 코드를 실행하는 초기화 및 정리 특성

    • 단위 테스트 실행 중 일부 예외 형식이 throw되는지 확인하는 ExpectedException 특성

    • 데이터 기반 테스트에 대한 데이터 연결과 같이 단위 테스트에 제공되는 정보와 ASP.NET 웹 서비스에 대한 단위 테스트를 실행하는 데 필요한 정보를 저장하는 TestContext 클래스

    자세한 내용은 Microsoft.VisualStudio.TestTools.UnitTesting을 참조하십시오.

  2. TestClassAttribute: 단위 테스트를 만들면 이 특정 클래스에 [TestMethod()] 특성으로 표시된 메서드가 포함될 수 있음을 나타내는 TestClassAttribute가 테스트 파일에 포함됩니다. TestClassAttribute가 없으면 테스트 메서드가 무시됩니다.

    테스트 클래스는 동일한 어셈블리에 있는 다른 테스트 클래스에서 메서드를 상속할 수 있습니다. 따라서 기본 테스트 클래스에서 테스트 메서드를 만든 다음 파생 테스트 클래스에서 이 메서드를 사용할 수 있습니다.

    자세한 내용은 TestClassAttribute를 참조하십시오.

  3. TestContext: 단위 테스트를 만들면 각 테스트 클래스에 대해 testContextInstance라는 변수가 포함됩니다. TestContext 클래스의 속성은 현재 테스트에 대한 정보를 저장합니다. 자세한 내용은 TestContext를 참조하십시오.

파일의 최하위 섹션

다음 그림에서는 연습에서 생성된 코드의 뒷부분, 즉 "Additional test attributes" 섹션, TestMethod 특성 및 Assert 문이 포함된 메서드 논리를 보여 줍니다.

샘플 단위 테스트 파일의 아래쪽 섹션

  1. Additional test attributes: 이 섹션을 확장하면 다음 특성을 사용하여 초기화 및 정리를 포함하는 데 사용할 수 있는 주석 처리된 메서드가 표시됩니다.

    1. [ClassInitialize()]:   클래스의 첫 번째 테스트를 실행하기 전에 코드를 실행하려면 ClassInitialize를 사용합니다.

    2. [ClassCleanUp()]:   클래스의 모든 테스트를 실행한 후 코드를 실행하려면 ClassCleanup을 사용합니다.

    3. [TestInitialize()]:   각 테스트를 실행하기 전에 코드를 실행하려면 TestInitialize를 사용합니다.

    4. [TestCleanUp()]:   각 테스트를 실행한 후 코드를 실행하려면 TestCleanup을 사용합니다.

      [ClassInitialize()] 또는 [TestInitialize()] 특성으로 표시되는 메서드를 만들어 단위 테스트를 실행할 환경을 준비합니다. 이는 단위 테스트를 실행하기 위해 알려진 상태를 설정하기 위한 것입니다. 예를 들어 [ClassInitialize()] 또는 [TestInitialize()] 메서드를 사용하여 테스트에서 사용할 특정 데이터 파일을 복사, 변경 또는 생성할 수 있습니다.

      [ClassCleanup()] 또는 [TestCleanUp{}] 특성으로 표시되는 메서드를 만들어 테스트를 실행한 후 알려진 상태로 환경을 되돌립니다. 이를 위해 폴더의 파일을 삭제하거나 데이터베이스를 알려진 상태로 되돌려야 합니다. 예를 들어 주문 입력 응용 프로그램에서 사용되는 메서드를 테스트한 후 재고 데이터베이스를 초기 상태로 다시 설정해야 합니다.

      참고

      종료자 메서드가 아니라 [TestCleanup()] 또는 [ClassCleanup()] 메서드에 정리 코드를 사용하는 것이 좋습니다. 종료자 메서드에서 throw되는 예외는 catch되지 않으므로 예기치 않은 결과가 발생할 수 있습니다.

  2. TestMethodAttribute: 단위 테스트를 만들면 각 단위 테스트 메서드가 [TestMethod()] 특성으로 표시됩니다. 이 특성이 없으면 단위 테스트가 실행되지 않습니다. TestMethod 특성에 대한 자세한 내용은 TestMethodAttribute를 참조하십시오.

  3. Assert 문을 포함한 테스트 메서드 논리: 생성되는 각 단위 테스트에는 빈 변수와 자리 표시자 Assert 문이 있습니다. 기본 자리 표시자 Assert 문은 일반적으로 Assert.Inconclusive 문입니다. 테스트가 의미 있도록 하려면 변수를 초기화하고 자리 표시자를 적절한 Assert 문으로 바꿔야 합니다.

    이 예제에서는 TODO 문을 포함하는 CreditTest 단위 테스트 메서드를 생성된 그대로 사용했습니다. 그러나 변수를 초기화하고 DebitTest 테스트 메서드의 Assert 문을 바꿨습니다. TODO 문은 이러한 코드 줄을 초기화할 수 있게 해 주는 미리 알림 역할을 합니다.

    참고

    테스트 메서드의 내용은 단위 테스트의 형식과 테스트할 메서드의 특성에 따라 달라질 수 있습니다.

명명 규칙에 대한 참고 사항: Visual Studio 테스트 도구에서는 단위 테스트가 생성될 때 명명 규칙을 사용합니다. 예를 들어 테스트할 코드를 포함하는 파일의 이름과 단어 "Test"를 연결하여 단위 테스트 파일의 이름을 지정합니다. 이 예제에서는 "BankAccountTest.cs"가 됩니다. 또한 테스트 클래스 및 테스트 메서드의 이름은 기본값을 사용하여 생성됩니다. 단위 테스트 만들기 대화 상자의 설정을 클릭하여 열 수 있는 테스트 생성 설정 대화 상자에서 이러한 기본값을 변경할 수 있습니다.

솔루션에 추가되는 항목

이 단원에서는 연습: 단위 테스트 생성 및 실행에서 생성되는 단위 테스트 파일 이외의 파일에 대해 설명합니다.

참고

단위 테스트를 생성할 때 기본적으로 만들어지는 파일은 테스트 프로젝트 설정에 따라 달라집니다. 이러한 설정을 변경하려면 도구를 클릭한 다음 옵션을 클릭합니다. 옵션 대화 상자에서 테스트 도구를 확장한 다음 테스트 프로젝트를 클릭합니다.

다음 그림에서는 예제 프로젝트에 대한 단위 테스트를 만든 이후의 솔루션 탐색기를 보여 줍니다.

샘플 단위 테스트 프로젝트의 솔루션 탐색기

  1. 솔루션 항목: 솔루션 항목에는 다음 두 개의 파일이 포함됩니다.

    • Local.testsettings: 이러한 설정은 진단 데이터를 수집하지 않는 로컬 테스트가 실행되는 방식을 제어합니다.

    • Bank.vsmdi: 이 파일에는 솔루션에 있는 테스트 목록에 대한 정보가 포함되며 테스트 목록 편집기 창에는 이 정보가 채워집니다.

    • TraceAndTestImpact.testsettings: 이러한 설정은 진단 데이터의 특정 집합을 수집하는 로컬 테스트가 실행되는 방식을 제어합니다.

  2. 테스트 프로젝트: 단위 테스트에 필요한 나머지 파일이 포함됩니다.

  3. 테스트 프로젝트 속성: 프로젝트에 대한 빌드 옵션을 제공하는 AssemblyInfo.cs 파일이 포함됩니다.

  4. 테스트 프로젝트 참조: 단위 테스트를 실행하는 데 필요한 참조가 포함됩니다. 기존 코드에서 단위 테스트를 생성할 경우 필요한 참조가 포함됩니다. 그러나 참조를 추가하여 테스트를 사용자 지정할 수도 있습니다.

  5. 단위 테스트 파일: 이 항목의 첫 번째 단원에서 설명한 단위 테스트 파일입니다. 테스트하는 각 클래스에 대해 별도의 단위 테스트 파일이 테스트 프로젝트에 만들어집니다. 이 예제에서는 테스트하는 두 메서드가 모두 동일한 클래스에 속해 있습니다. 따라서 테스트 클래스 파일이 BankAccountTest.cs 하나만 있습니다.

참고 항목

참조

Microsoft.VisualStudio.TestTools.UnitTesting

개념

기존 코드에 대한 단위 테스트 생성 및 실행

단위 테스트와 C++

제네릭 메서드의 단위 테스트

ASP.NET 웹 서비스의 단위 테스트

Private, Internal 및 Friend 메서드의 단위 테스트