단위 테스트 기본 사항Unit Test Basics

단위 테스트를 만들고 실행하여 코드가 예상대로 작동하는지 확인합니다.Check that your code is working as expected by creating and running unit tests. 프로그램의 기능을 개별적인 단위로 테스트할 수 있는 고유한 테스트 가능 동작으로 구분하므로 이를 유닛 테스트라고 합니다.It's called unit testing because you break down the functionality of your program into discrete testable behaviors that you can test as individual units. Visual Studio 테스트 탐색기는 Visual Studio에서 단위 테스트를 실행하고 결과를 볼 수 있는 유연하고 효율적인 방법을 제공합니다.Visual Studio Test Explorer provides a flexible and efficient way to run your unit tests and view their results in Visual Studio. Visual Studio에는 관리 코드 및 네이티브 코드에 대한 Microsoft 단위 테스트 프레임워크가 설치됩니다.Visual Studio installs the Microsoft unit testing frameworks for managed and native code. 단위 테스트 프레임워크 를 사용하여 단위 테스트를 만들고, 실행하고, 이러한 테스트 결과를 보고합니다.Use a unit testing framework to create unit tests, run them, and report the results of these tests. 변경 시 단위 테스트를 다시 실행하여 코드가 여전히 제대로 작동하는지 테스트합니다.Rerun unit tests when you make changes to test that your code is still working correctly. Visual Studio Enterprise에서는 Live Unit Testing을 사용하여 이 작업을 자동으로 수행할 수 있습니다. 이 테스트는 코드 변경의 영향을 받는 테스트를 검색하고 사용자가 입력할 때 백그라운드에서 실행됩니다.Visual Studio Enterprise can do this automatically with Live Unit Testing, which detects tests affected by your code changes and runs them in the background as you type.

유닛 테스트는 소프트웨어 개발 워크플로의 핵심 요소로 사용될 때 코드 품질에 대한 효과가 가장 큽니다.Unit testing has the greatest effect on the quality of your code when it's an integral part of your software development workflow. 함수 또는 다른 응용 프로그램 코드 블록을 작성하는 즉시 표준, 경계, 잘못된 입력 데이터 사례에 맞게 코드 동작을 확인하고 코드가 가진 모든 명시적 또는 암시적 가정을 확인하는 단위 테스트를 만듭니다.As soon as you write a function or other block of application code, create unit tests that verify the behavior of the code in response to standard, boundary, and incorrect cases of input data, and that check any explicit or implicit assumptions made by the code. 테스트 기반 개발을 사용하여 코드를 작성하기 전에 단위 테스트를 만들고, 이러한 단위 테스트를 기능 사양 및 디자인 설명서로 사용합니다.With test driven development, you create the unit tests before you write the code, so you use the unit tests as both design documentation and functional specifications.

코드에서 테스트 프로젝트 및 테스트 메서드를 빠르게 생성하거나, 필요에 따라 테스트를 수동으로 만들 수 있습니다.You can quickly generate test projects and test methods from your code, or manually create the tests as you need them. IntelliTest를 사용하여 .NET 코드를 탐색하는 경우 테스트 데이터 및 단위 테스트 도구 모음을 생성할 수 있습니다.When you use IntelliTest to explore your .NET code, you can generate test data and a suite of unit tests. 코드의 모든 문에 대해 해당 문을 실행할 테스트 입력이 생성됩니다.For every statement in the code, a test input is generated that will execute that statement. 코드에 대한 단위 테스트를 생성하는 방법을 알아봅니다.Find out how to generate unit tests for your code.

테스트 탐색기에서는 또한 테스트 탐색기 추가 기능 인터페이스가 구현된 타사 및 오픈 소스 방식의 단위 테스트 프레임워크도 실행할 수 있습니다.Test Explorer can also run third-party and open source unit test frameworks that have implemented Test Explorer add-on interfaces. 이러한 여러 프레임워크는 Visual Studio 확장 관리자 및 Visual Studio 갤러리를 통해 추가할 수 있습니다.You can add many of these frameworks through the Visual Studio Extension Manager and the Visual Studio gallery. 타사 단위 테스트 프레임워크 설치를 참조하세요.See Install third-party unit test frameworks

단위 테스트 개요Unit testing overview

빠른 시작Quick starts

코딩으로 직접 이동하는 단위 테스트에 대한 설명을 보려면 다음 항목 중 하나를 참조하세요.For an introduction to unit testing that takes you directly into coding, see one of these topics:

MyBank 솔루션 예제The MyBank Solution example

이 항목에서는 MyBank 라는 가상의 응용 프로그램 개발이 예제로 사용됩니다.In this topic, we use the development of a fictional application called MyBank as an example. 이 항목의 설명을 이해하는 데에는 실제 코드가 필요하지 않습니다.You don't need the actual code to follow the explanations in this topic. 테스트 메서드는 C#으로 작성되고 관리 코드에 대한 Microsoft 단위 테스트 프레임워크를 사용하여 제공됩니다. 하지만 이러한 개념은 다른 언어 및 프레임워크에서도 쉽게 적용할 수 있습니다.Test methods are written in C# and presented by using the Microsoft Unit Testing Framework for Managed Code, However, the concepts are easily transferred to other languages and frameworks.

MyBank 솔루션MyBank Solution

MyBank 응용 프로그램을 설계할 때의 첫 번째 작업에는 개별 계좌 및 은행과의 트랜잭션을 나타내는 계좌 구성 요소와 개별 계좌를 집계하고 관리하는 기능을 나타내는 데이터베이스 구성 요소가 포함됩니다.Our first attempt at a design for the MyBank application includes an accounts component that represents an individual account and its transactions with the bank, and a database component that represents the functionality to aggregate and manage the individual accounts.

여기서 만드는 MyBank 솔루션에는 다음 두 가지 프로젝트가 포함됩니다.We create a MyBank solution that contains two projects:

  • Accounts

  • BankDb

    Accounts 프로젝트를 설계할 때의 첫 번째 작업에는 계좌에 대한 기본 정보를 저장하는 클래스, 계좌에서 자산을 맡기거나 인출하는 것과 같이 모든 유형의 계좌가 공통적으로 갖고 있는 기능을 지정하는 인터페이스, 입출금 계좌(checking account)를 나타내는 인터페이스에서 파생된 클래스가 포함됩니다.Our first attempt at designing the Accounts project contain a class to hold basic information about an account, an interface that specifies the common functionality of any type of account, like depositing and withdrawing assets from the account, and a class derived from the interface that represents a checking account. Accounts 프로젝트는 다음과 같은 소스 파일을 만드는 것으로 시작됩니다.We begin the Accounts projects by creating the following source files:

  • AccountInfo.cs 는 계좌에 대한 기본 정보를 정의합니다.AccountInfo.cs defines the basic information for an account.

  • IAccount.cs 는 계좌에서 자산을 맡기거나 인출하는 메서드 및 계좌 잔액을 가져오는 메서드를 포함해서 계좌에 대한 표준 IAccount 인터페이스를 정의합니다.IAccount.cs defines a standard IAccount interface for an account, including methods to deposit and withdraw assets from an account and to retrieve the account balance.

  • CheckingAccount.cs 는 입출금 계좌에 대한 CheckingAccount 인터페이스를 구현하는 IAccounts 클래스를 포함합니다.CheckingAccount.cs contains the CheckingAccount class that implements the IAccounts interface for a checking account.

    입출금 계좌에서 금액을 인출할 때는 인출 금액이 계좌 잔액보다 작은지 확인해야 합니다.We know from experience that one thing a withdrawal from a checking account must do is to make sure that the amount withdrawn is less than the account balance. 따라서 여기에서는 IAccount.Withdaw 에서 CheckingAccount 메서드를 이러한 조건을 확인할 수 있는 메서드로 재정의합니다.So we override the IAccount.Withdaw method in CheckingAccount with a method that checks for this condition. 이 메서드는 다음과 같을 수 있습니다.The method might look like this:


public void Withdraw(double amount)  
{  
    if(m_balance >= amount)  
    {  
        m_balance -= amount;  
    }  
    else  
    {  
        throw new ArgumentException(amount, "Withdrawal exceeds balance!")  
    }  
}  

이제 코드가 작성되었으므로 테스트할 시간입니다.Now that we have some code, it's time for testing.

단위 테스트 프로젝트 및 테스트 메서드 만들기Create unit test projects and test methods

코드에서 단위 테스트 프로젝트와 단위 테스트 스텁을 생성하는 것이 더 빠를 수 있습니다.It is often quicker to generate the unit test project and unit test stubs from your code. 또는 요구 사항에 따라 단위 테스트 프로젝트 및 테스트를 수동으로 만들도록 선택할 수 있습니다.Or you can choose to create the unit test project and tests manually depending on your requirements.

단위 테스트 프로젝트 및 단위 테스트 스텁 생성Generate unit test project and unit test stubs

  1. 코드 편집기 창에서 마우스 오른쪽 단추를 클릭하고 상황에 맞는 메뉴에서 단위 테스트 만들기 를 선택합니다.From the code editor window, right-click and choose Create Unit Tests from the context menu.

    편집기 창에서 상황에 맞는 메뉴 표시From the editor window, view the context menu

  2. 확인을 클릭하여 단위 테스트를 만드는 기본값을 그대로 사용하거나, 단위 테스트 프로젝트와 단위 테스트를 만들고 이름을 지정하는 데 사용되는 값을 변경합니다.Click OK to accept the defaults to create your unit tests, or change the values used to create and name the unit test project and the unit tests. 단위 테스트 메서드에 기본적으로 추가되는 코드를 선택할 수 있습니다.You can select the code that is added by default to the unit test methods.

    편집기에서 마우스 오른쪽 단추를 클릭하고 [단위 테스트 만들기]를 선택Right-click in editor and choose Create Unit Tests

  3. 단위 테스트 스텁은 클래스의 모든 메서드에 대한 새 단위 테스트 프로젝트에서 만들어집니다.The unit test stubs are created in a new unit test project for all the methods in the class.

    단위 테스트가 생성됨The unit tests are created

  4. 이제 단위 테스트 메서드에 코드를 추가 하여 단위 테스트에 의미를 부여하는 방법과 코드를 철저히 테스트하기 위해 추가할 수 있는 추가 단위 테스트에 대해 알아보겠습니다.Now jump ahead to learn how to add code to the unit test methods to make your unit test meaningful, and any extra unit tests that you might want to add to thoroughly test your code.

    수동으로 단위 테스트 프로젝트 및 단위 테스트 만들기Create your unit test project and unit tests manually

    단위 테스트 프로젝트에는 일반적으로 단일 코드 프로젝트의 구조가 반영됩니다.A unit test project usually mirrors the structure of a single code project. MyBank 예제에서는 AccountsTestsBankDbTests 라는 2개의 단위 테스트 프로젝트를 MyBanks 솔루션에 추가합니다.In the MyBank example, you add two unit test projects named AccountsTests and BankDbTests to the MyBanks solution. 테스트 프로젝트 이름은 임의로 지정할 수 있지만 표준 명명 규칙을 채택해서 사용하는 것이 좋습니다.The test project names are arbitrary, but adopting a standard naming convention is a good idea.

    솔루션에 단위 테스트 프로젝트를 추가하려면To add a unit test project to a solution:

  5. 파일 메뉴에서 새로 만들기 를 선택한 후 프로젝트 를 선택합니다(키보드 Ctrl+Shift+N).On the File menu, choose New and then choose Project (Keyboard Ctrl + Shift + N).

  6. 새 프로젝트 대화 상자에서 설치됨 노드를 확장하고 테스트 프로젝트에 사용하려는 언어를 선택한 후 테스트를 선택합니다.On the New Project dialog box, expand the Installed node, choose the language that you want to use for your test project, and then choose Test.

  7. Microsoft 단위 테스트 프레임워크 중 하나를 사용하려면 프로젝트 템플릿 목록에서 단위 테스트 프로젝트 를 선택합니다.To use one of the Microsoft unit test frameworks, choose Unit Test Project from the list of project templates. 그렇지 않으면 사용하려는 단위 테스트 프레임워크의 프로젝트 템플릿을 선택합니다.Otherwise, choose the project template of the unit test framework that you want to use. 예제에 사용된 Accounts 프로젝트를 테스트하려면 프로젝트 이름을 AccountsTests로 지정해야 합니다.To test the Accounts project of our example, you would name the project AccountsTests.

    경고

    모든 타사 및 오픈 소스 단위 테스트 프레임워크에서 Visual Studio 프로젝트 템플릿이 제공되지는 않습니다.Not all third-party and open source unit test frameworks provide a Visual Studio project template. 프로젝트 만들기에 대한 정보는 해당 프레임워크 설명서를 참조하세요.Consult the framework document for information about creating a project.

  8. 단위 테스트 프로젝트에서 이 예제에서 테스트하려는 코드 프로젝트에 대한 참조를 Accounts 프로젝트에 추가합니다.In your unit test project, add a reference to the code project under test, in our example to the Accounts project.

    코드 프로젝트에 대한 참조를 만들려면:To create the reference to the code project:

    1. 솔루션 탐색기에서 프로젝트를 선택합니다.Select the project in Solution Explorer.

    2. 프로젝트 메뉴에서 참조 추가를 선택합니다.On the Project menu, choose Add Reference.

    3. 참조 관리자 대화 상자에서 솔루션 노드를 열고 프로젝트를 선택합니다.On the Reference Manager dialog box, open the Solution node and choose Projects. 코드 프로젝트 이름을 선택하고 대화 상자를 닫습니다.Select the code project name and close the dialog box.

    각 단위 테스트 프로젝트에는 코드 프로젝트에 있는 클래스 이름과 동일한 클래스가 포함됩니다.Each unit test project contains classes that mirror the names of the classes in the code project. 이 예제의 경우 AccountsTests 프로젝트에는 다음과 같은 클래스가 포함됩니다.In our example, the AccountsTests project would contain the following classes:

  • AccountInfoTests 클래스에는 AccountInfo 프로젝트의 BankAccount 클래스에 대한 단위 테스트 메서드가 포함됩니다.AccountInfoTests class contains the unit test methods for the AccountInfo class in the BankAccount project

  • CheckingAccountTests 클래스는 CheckingAccount 클래스에 대한 단위 테스트 메서드가 포함됩니다.CheckingAccountTests class contains the unit test methods for CheckingAccount class.

테스트 작성Write your tests

사용 중인 단위 테스트 프레임워크 및 Visual Studio IntelliSense에서는 코드 프로젝트에 대해 단위 테스트에 대한 코드를 작성하는 방법이 안내됩니다.The unit test framework that you use and Visual Studio IntelliSense will guide you through writing the code for your unit tests for a code project. 테스트 탐색기에서 실행할 수 있으려면, 대부분의 프레임워크의 경우, 단위 테스트 메서드를 식별할 수 있는 특정 특성을 추가해야 합니다.To run in Test Explorer, most frameworks require that you add specific attributes to identify unit test methods. 프레임워크는 또한 일반적으로 어설션 문 또는 메서드 특성을 통해 테스트 메서드가 통과 또는 실패했는지 여부를 나타내는 방법을 제공합니다.The frameworks also provide a way—usually through assert statements or method attributes—to indicate whether the test method has passed or failed. 다른 특성들은 클래스 초기화 시에 그리고 각 테스트 메서드 이전에 사용되는 선택적인 설정 메서드와 각 테스트 메서드 다음에 그리고 클래스가 삭제되기 전에 실행되는 해체 메서드를 식별합니다.Other attributes identify optional setup methods that are at class initialization and before each test method and teardown methods that are run after each test method and before the class is destroyed.

AAA(정렬, 동작, 어설션) 패턴은 테스트 중인 메서드에 대한 단위 테스트를 작성하는 일반적인 방법입니다.The AAA (Arrange, Act, Assert) pattern is a common way of writing unit tests for a method under test.

  • 단위 테스트 메서드의 정렬 섹션은 객체를 초기화하고 테스트 중인 메서드에 전달되는 데이터의 값을 설정합니다.The Arrange section of a unit test method initializes objects and sets the value of the data that is passed to the method under test.

  • 동작 섹션은 정렬된 매개 변수를 사용하여 테스트 중인 메서드를 호출합니다.The Act section invokes the method under test with the arranged parameters.

  • 어설션 섹션은 테스트 중인 메서드의 작업이 예상한 대로 작동하는지 확인합니다.The Assert section verifies that the action of the method under test behaves as expected.

    이 예제에서 CheckingAccount.Withdraw 메서드를 테스트하려면 두 가지 테스트를 작성할 수 있습니다. 하나는 메서드의 표준 동작을 확인하는 테스트이고, 다른 하나는 잔액 이상의 출금이 실패하는지 확인하는 메서드입니다.To test the CheckingAccount.Withdraw method of our example, we can write two tests: one that verifies the standard behavior of the method, and one that verifies that a withdrawal of more than the balance will fail. CheckingAccountTests 클래스에서는 다음 메서드를 추가합니다.In the CheckingAccountTests class, we add the following methods:

[TestMethod]  
public void Withdraw_ValidAmount_ChangesBalance()  
{  
    // arrange  
    double currentBalance = 10.0;  
    double withdrawal = 1.0;  
    double expected = 9.0;  
    var account = new CheckingAccount("JohnDoe", currentBalance);  
    // act  
    account.Withdraw(withdrawal);  
    double actual = account.Balance;  
    // assert  
    Assert.AreEqual(expected, actual);  
}  

[TestMethod]  
[ExpectedException(typeof(ArgumentException))]  
public void Withdraw_AmountMoreThanBalance_Throws()  
{  
    // arrange  
    var account = new CheckingAccount("John Doe", 10.0);  
    // act  
    account.Withdraw(20.0);  
    // assert is handled by the ExpectedException  
}  

Withdraw_ValidAmount_ChangesBalance 는 명시적인 Assert 문을 사용해서 테스트 메서드가 통과되거나 실패하는지 확인하지만 Withdraw_AmountMoreThanBalance_ThrowsExpectedException 특성을 사용해서 테스트 메서드의 성공을 확인합니다.Note that Withdraw_ValidAmount_ChangesBalance uses an explicit Assert statement to determine whether the test method passes or fails, while Withdraw_AmountMoreThanBalance_Throws uses the ExpectedException attribute to determine the success of the test method. 내부적으로 단위 테스트 프레임워크는 try/catch 문으로 테스트 메서드를 래핑합니다.Under the covers, a unit test framework wraps test methods in try/catch statements. 대부분의 경우, 예외가 catch되면 테스트 메서드가 실패하고 예외가 무시됩니다.In most cases, if an exception is caught, the test method fails and the exception is ignored. ExpectedException 특성은 지정된 예외가 throw될 경우 테스트 메서드가 통과되도록 만듭니다.The ExpectedException attribute causes the test method to pass if the specified exception is thrown.

Microsoft 단위 테스트 프레임워크에 대한 자세한 내용은 다음 항목 중 하나를 참조하세요.For more information about the Microsoft Unit Testing Frameworks, see one of the following topics:

단위 테스트에 대한 시간 제한 설정Set timeouts for unit tests

개별 테스트 메서드에 대해 제한 시간을 설정하려면To set a timeout on an individual test method:

[TestMethod]  
[Timeout(2000)]  // Milliseconds  
public void My_Test()  
{ ...  
}  

제한 시간을 허용되는 최대 시간으로 설정하려면To set the timeout to the maximum allowed:

[TestMethod]  
[Timeout(TestTimeout.Infinite)]  // Milliseconds  
public void My_Test ()  
{ ...  
}  

테스트 탐색기에서 테스트 실행Run tests in Test Explorer

테스트 프로젝트를 빌드하면 테스트가 테스트 탐색기에 나타납니다.When you build the test project, the tests appear in Test Explorer. 테스트 탐색기가 표시되지 않는 경우 Visual Studio 메뉴에서 테스트 를 선택하고 Windows를 선택한 다음 테스트 탐색기를 선택합니다.If Test Explorer is not visible, choose Test on the Visual Studio menu, choose Windows, and then choose Test Explorer.

단위 테스트 탐색기Unit Test Explorer

테스트를 실행, 작성 및 다시 실행할 때 테스트 탐색기의 기본 보기에는 실패한 테스트, 통과한 테스트, 건너뛴 테스트실행하지 않은 테스트그룹으로 결과를 표시합니다.As you run, write, and rerun your tests, the default view of Test Explorer displays the results in groups of Failed Tests, Passed Tests, Skipped Tests and Not Run Tests. 그룹 제목을 선택하면 해당 그룹의 모든 테스트를 표시하는 보기를 열 수 있습니다.You can choose a group heading to open the view that displays all them tests in that group.

또한 어떤 보기에서든 전역 수준에서 검색 상자에 텍스트를 입력하거나 미리 정의된 필터 중 하나를 선택하여 테스트를 필터링할 수 있습니다.You can also filter the tests in any view by matching text in the search box at the global level or by selecting one of the pre-defined filters. 언제든지 원하는 테스트를 선택해서 실행할 수 있습니다.You can run any selection of the tests at any time. 테스트 실행 결과는 탐색기 창 맨 위에 있는 통과/실패 표시줄에 즉시 표시됩니다.The results of a test run are immediately apparent in the pass/fail bar at the top of the explorer window. 테스트를 선택하면 테스트 메서드 결과에 대한 세부 정보가 표시됩니다.Details of a test method result are displayed when you select the test.

테스트 실행 및 보기Run and view tests

테스트 탐색기 도구 모음을 사용하면 원하는 테스트를 검색, 구성 및 실행할 수 있습니다.The Test Explorer toolbar helps you discover, organize, and run the tests that you are interested in.

테스트 탐색기 도구 모음에서 테스트 실행Run tests from the Test Explorer toolbar

사용자는 모두 실행 을 선택해서 모든 테스트를 실행하거나 실행 을 선택해서 실행할 테스트 하위 집합을 선택할 수 있습니다.You can choose Run All to run all your tests, or choose Run to choose a subset of tests to run. 일련의 테스트들을 실행한 다음에는 테스트 탐색기 창의 맨 아래에 테스트 실행의 요약이 나타납니다.After you run a set of tests, a summary of the test run appears at the bottom of the Test Explorer window. 테스트를 선택하면 아래쪽 창에 해당 테스트의 세부 정보가 표시됩니다.Select a test to view the details of that test in the bottom pane. 컨텍스트 메뉴에서 테스트 열기 선택하여(키보드: F12) 선택된 테스트에 대한 소스 코드를 표시합니다.Choose Open Test from the context menu (Keyboard: F12) to display the source code for the selected test.

개별 테스트에 종속성이 없어 임의 순서로 실행할 수 있는 경우 도구 모음의 UTE_parallelicon-small 토글 단추를 사용하여 병렬 테스트 실행을 켭니다.If individual tests have no dependencies that prevent them from being run in any order, turn on parallel test execution with the UTE_parallelicon-small toggle button on the toolbar. 이렇게 하면 모든 테스트를 실행하는 데 걸리는 시간을 훨씬 줄일 수 있습니다.This can noticeably reduce the time taken to run all the tests.

각 빌드 후 테스트 실행Run tests after every build

경고

각 빌드 후 단위 테스트 실행은 Visual Studio Enterprise에서만 지원됩니다.Running unit tests after every build is supported only in Visual Studio Enterprise.

빌드 후 실행Run after build 각 로컬 빌드 후 단위 테스트를 실행하려면 표준 메뉴에서 테스트 를 선택한 후 테스트 탐색기 도구 모음에서 빌드 후 테스트 실행 을 선택합니다.To run your unit tests after each local build, choose Test on the standard menu, choose Run Tests After Build on the Test Explorer toolbar.

테스트 목록 필터링 및 그룹화Filter and group the test list

많은 수의 테스트가 있으면 테스트 탐색기 검색 상자에 입력하여 지정된 문자열로 목록을 필터링할 수 있습니다.When you have a large number of tests, you can Type in Test Explorer search box to filter the list by the specified string. 필터 목록에서 선택하여 필터 이벤트를 더 제한할 수 있습니다.You can restrict your filter event more by choosing from the filter list.

검색 필터 범주Search filter categories

테스트 탐색기 그룹 단추Test Explorer group button 범주에 따라 테스트를 그룹화하려면 그룹화 방법 단추를 선택합니다.To group your tests by category, choose the Group By button.

자세한 내용은 테스트 탐색기를 사용하여 단위 테스트 실행을 참조하세요.For more information, see Run unit tests with Test Explorer

Q&AQ&A

Q: 단위 테스트를 디버그하려면 어떻게 해야 하나요?Q: How do I debug unit tests?

A: 테스트 탐색기를 사용하여 테스트에 대한 디버깅 세션을 시작할 수 있습니다.A: Use Test Explorer to start a debugging session for your tests. Visual Studio 디버거에서 코드를 단계별로 실행하면 단위 테스트 및 테스트 중인 프로젝트 간을 앞뒤로 매끄럽게 이동할 수 있습니다.Stepping through your code with the Visual Studio debugger seamlessly takes you back and forth between the unit tests and the project under test. 디버깅을 시작하려면To start debugging:

  1. Visual Studio 편집기에서 디버그하려는 하나 이상의 테스트 메서드에서 중단점을 설정합니다.In the Visual Studio editor, set a breakpoint in one or more test methods that you want to debug.

    참고

    테스트 메서드는 순서에 관계 없이 실행할 수 있기 때문에 디버그하려는 모든 테스트 메서드에 중단점을 설정합니다.Because test methods can run in any order, set breakpoints in all the test methods that you want to debug.

  2. 테스트 탐색기에서 테스트 메서드를 선택한 다음 바로 가기 메뉴에서 선택한 테스트 디버그 를 선택합니다.In Test Explorer, select the test methods and then choose Debug Selected Tests from the shortcut menu.

    자세한 내용은 단위 테스트 디버그를 참조하세요.Learn more details about debugging unit tests.

    Q: TDD를 사용 중인 경우 테스트에서 코드를 생성하려면 어떻게 해야 하나요?Q: If I'm using TDD, how do I generate code from my tests?

    A: IntelliSense를 사용해서 프로젝트 코드에서 클래스 및 메서드를 생성합니다.A: Use IntelliSense to generate classes and methods in your project code. 테스트 메서드에서 생성하려는 클래스 또는 메서드를 호출하는 문을 작성한 후 해당 호출에서 IntelliSense 메뉴를 엽니다.Write a statement in a test method that calls the class or method that you want to generate, then open the IntelliSense menu under the call. 새 클래스의 생성자에 대한 호출인 경우에는 메뉴에서 새 형식 생성 을 선택하고 마법사에 따라 코드 프로젝트에 클래스를 삽입합니다.If the call is to a constructor of the new class, choose Generate new type from the menu and follow the wizard to insert the class in your code project. 메서드에 대한 호출인 경우에는 IntelliSense 메뉴에서 새 메서드 생성 을 선택합니다.If the call is to a method, choose Generate new method from the IntelliSense menu.

    메서드 스텁 IntelliSense 메뉴 생성Generate Method Stub Intellisense Menu

    Q: 테스트를 실행하기 위한 입력으로 여러 데이터 집합을 사용하는 단위 테스트를 만들 수 있나요?Q: Can I create unit tests that take multiple sets of data as input to run the test?

    A: 예.A: Yes. 데이터 기반 테스트 메서드 를 사용하면 단일 단위 테스트 메서드에서 값 범위를 확인할 수 있습니다.Data-driven test methods let you test a range of values with a single unit test method. 테스트하려는 변수 값이 포함된 데이터 소스 및 테이블을 지정하는 테스트 메서드에 대한 DataSource 특성을 사용합니다.Use a DataSource attribute for the test method that specifies the data source and table that contains the variable values that you want to test. 메서드 본문에서 TestContext.DataRow[ColumnName] 인덱서를 사용하여 변수에 행 값을 할당합니다.In the method body, you assign the row values to variables using the TestContext.DataRow[ColumnName] indexer.

참고

이러한 절차는 관리 코드에 대한 Microsoft 단위 테스트 프레임워크를 사용하여 작성하는 테스트 메서드에만 적용됩니다.These procedures apply only to test methods that you write by using the Microsoft unit test framework for managed code. 다른 프레임워크를 사용하는 경우에는 동일한 기능에 대한 해당 프레임워크 설명서를 참조하세요.If you're using a different framework, consult the framework documentation for equivalent functionality.

예를 들어 CheckingAccount 라는 AddIntegerHelper클래스에 불필요한 메서드를 추가한다고 가정해보세요.For example, assume we add an unnecessary method to the CheckingAccount class that is named AddIntegerHelper. AddIntegerHelper 는 두 개의 정수를 추가합니다.AddIntegerHelper adds two integers.

AddIntegerHelper 메서드에 대해 데이터 기반 테스트를 만들려면 먼저 AccountsTest.accdb 라는 Access 데이터베이스와 AddIntegerHelperData라는 테이블을 만듭니다.To create a data-driven test for the AddIntegerHelper method, we first create an Access database named AccountsTest.accdb and a table named AddIntegerHelperData. AddIntegerHelperData 표는 추가에 대한 첫 번째 및 두 번째 피연산자를 지정하는 열과 예상 결과를 지정하기 위한 열을 정의합니다.The AddIntegerHelperData table defines columns to specify the first and second operands of the addition and a column to specify the expected result. 여러 행에 적절한 값을 채웁니다.We fill a number of rows with appropriate values.


[DataSource(  
    @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Projects\MyBank\TestData\AccountsTest.accdb",   
    "AddIntegerHelperData"  
)]  
[TestMethod()]  
public void AddIntegerHelper_DataDrivenValues_AllShouldPass()  
{  
    var target = new CheckingAccount();  
    int x = Convert.ToInt32(TestContext.DataRow["FirstNumber"]);  
    int y = Convert.ToInt32(TestContext.DataRow["SecondNumber"]);   
    int expected = Convert.ToInt32(TestContext.DataRow["Sum"]);  
    int actual = target.AddIntegerHelper(x, y);  
    Assert.AreEqual(expected, actual);  
}  

특성을 사용하는 메서드는 테이블의 각 행에 대해 한 번만 실행됩니다.The attributed method runs once for each row in the table. 테스트 탐색기는 반복이 실패할 경우 메서드에 대해 테스트 실패를 보고합니다.Test Explorer reports a test failure for the method if any of the iterations fail. 메서드에 대한 테스트 결과 정보 창에는 각 데이터의 행에 대한 통과/실패 상태 메서드가 표시됩니다.The test results detail pane for the method shows you the pass/fail status method for each row of data.

자세한 내용은 데이터 기반 단위 테스트를 참조하세요.Learn more about data-driven unit tests.

Q: 단위 테스트에서 테스트되는 코드의 양을 확인할 수 있나요?Q: Can I view how much of my code is tested by my unit tests?

A: 예.A: Yes. Visual Studio 코드 검사 도구를 사용하여 실제로 단위 테스트를 통해 테스트되는 코드의 양을 결정할 수 있습니다.You can determine the amount of your code that is actually being tested by your unit tests by using the Visual Studio code coverage tool. 네이티브 및 관리 언어 그리고 단위 테스트 프레임워크에서 실행할 수 있는 모든 단위 테스트 프레임워크가 지원됩니다.Native and managed languages and all unit test frameworks that can be run by the Unit Test Framework are supported.

솔루션의 선택된 테스트 또는 모든 테스트에 대해 코드 검사를 실행할 수 있습니다.You can run code coverage on selected tests or on all tests in a solution. 코드 검사 결과 창에는 실행된 제품 코드 블록의 백분율이 줄, 함수, 클래스, 네임스페이스 및 모듈별로 표시됩니다.The Code Coverage Results window displays the percentage of the blocks of product code that were exercised by line, function, class, namespace and module.

솔루션에서 테스트 메서드에 대한 코드 검사를 실행하려면 Visual Studio 메뉴에서 테스트 를 선택한 다음 코드 검사 분석을 선택합니다.To run code coverage for test methods in a solution, choose Tests on the Visual Studio menu and then choose Analyze code coverage.

검사 결과는 코드 검사 결과 창에 나타납니다.Coverage results appear in the Code Coverage Results window.

코드 검사 결과Code coverage results

자세한 내용은 코드 검사를 참조하세요.Learn more about code coverage .

Q: 외부 종속성이 있는 코드에서 메서드를 테스트하려면 어떻게 해야 하나요?Q: How can I test methods in my code that have external dependencies?

A: 예.A: Yes. Visual Studio Enterprise를 사용할 경우 Microsoft Fakes는 관리 코드에 대해 단위 테스트 프레임워크를 사용하여 작성하는 테스트 메서드에서 사용할 수 있습니다.If you have Visual Studio Enterprise, Microsoft Fakes can be used with test methods that you write by using unit test frameworks for managed code.

Microsoft Fakes는 외부 종속성에 대한 대체 클래스를 만들기 위해 두 가지 방법을 사용합니다.Microsoft Fakes uses two approaches to create substitute classes for external dependencies.

  1. 스텁 은 대상 종속성 클래스의 부모 인터페이스로부터 파생된 대체 클래스를 생성합니다.Stubs generate substitute classes derived from the parent interface of the target dependency class. 스텁 메서드는 대상 클래스의 공용 가상 메서드 대신 사용될 수 있습니다.Stub methods can be substituted for public virtual methods of the target class.

  2. Shim 은 런타임 계측을 사용하여 대상 메서드에 대한 호출을 비가상 메서드에 대한 대체 shim 메서드로 전환합니다.Shims use runtime instrumentation to divert calls to a target method to a substitute shim method for non-virtual methods.

    두 방법 모두, 테스트 메서드에서 원하는 동작을 지정하기 위해 종속 메서드에 대한 호출의 생성된 대리자를 사용합니다.In both approaches, you use the generated delegates of calls to the dependency method to specify the behavior that you want in the test method.

    자세한 내용은 Microsoft Fakes를 사용하여 단위 테스트 메서드 격리를 참조하세요.Learn more about isolating unit test methods with Microsoft Fakes.

    Q: 다른 단위 테스트 프레임워크를 사용하여 단위 테스트를 만들 수 있나요?Q: Can I use other unit test frameworks to create unit tests?

    A: 예, 다음 단계에 따라 다른 프레임워크를 찾아서 설치합니다.A: Yes, follow these steps to find and install other frameworks. Visual Studio를 다시 시작한 후 솔루션을 다시 열어 단위 테스트를 만들고 여기서 설치된 프레임워크를 선택합니다.After you restart Visual Studio, reopen your solution to create your unit tests, and then select your installed frameworks here:

    다른 설치된 단위 테스트 프레임워크 선택Select other installed unit test framework

    선택한 프레임워크를 사용하여 단위 테스트 스텁이 생성됩니다.Your unit test stubs will be created using the selected framework.