IntelliTest를 사용하여 코드에 대한 단위 테스트 생성Generate unit tests for your code with IntelliTest

IntelliTest는 .NET 코드를 탐색하여 테스트 데이터 및 단위 테스트 도구 모음을 생성합니다.IntelliTest explores your .NET code to 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. 코드의 모든 조건부 분기에 대해 사례 분석이 수행됩니다.A case analysis is performed for every conditional branch in the code. 예를 들어 if 문, 어설션 및 예외를 throw할 수 있는 모든 작업이 분석됩니다.For example, if statements, assertions, and all operations that can throw exceptions are analyzed. 이 분석은 각 메서드에 대해 매개 변수가 있는 단위 테스트용 테스트 데이터를 생성하는 데 사용됩니다(높은 코드 검사가 포함된 단위 테스트 생성).This analysis is used to generate test data for a parameterized unit test for each of your methods, creating unit tests with high code coverage.

IntelliTest를 실행하면 오류가 발생하는 테스트를 쉽게 확인하고 필요한 코드를 추가하여 수정할 수 있습니다.When you run IntelliTest, you can easily see which tests are failing and add any necessary code to fix them. 생성된 테스트 중에서 재발 테스트 모음을 제공하기 위해 테스트 프로젝트에 저장할 테스트를 선택할 수 있습니다.You can select which of the generated tests to save into a test project to provide a regression suite. 코드를 변경하면 IntelliTest를 다시 실행하여 생성된 테스트를 코드 변경 내용과 동기화합니다.As you change your code, rerun IntelliTest to keep the generated tests in sync with your code changes.

가용성 및 확장Availability and extensions

IntelliTest 만들기IntelliTest 실행 메뉴 명령:The Create IntelliTest and Run IntelliTest menu commands:

  • Visual Studio 2015 이상의 Enterprise Edition에서만 사용할 수 있습니다.Are available in only the Enterprise Edition of Visual Studio 2015 and later.

  • .NET Framework를 대상으로 하는 C# 코드만 지원합니다.Support only C# code that targets the .NET Framework.

  • 확장 가능하고 MSTest, MSTest V2, NUnit, xUnit 형식으로 테스트 내보내기를 지원합니다.Are extensible, and support emitting tests in MSTest, MSTest V2, NUnit, xUnit format.

  • x64 구성을 지원하지 않습니다.Do not support x64 configuration.

탐색: IntelliTest를 사용하여 코드 경로를 탐색하고 단위 테스트 생성Explore: Use IntelliTest to explore your code and generate unit tests

단위 테스트를 생성하려면 형식이 공용이어야 합니다.To generate unit tests, your types must be public. 그렇지 않은 경우 먼저 단위 테스트를 만든 후에 생성합니다.Otherwise, create unit tests first before you generate them.

  1. Visual Studio에서 솔루션을 엽니다.Open your solution in Visual Studio. 그런 다음 테스트할 메서드가 있는 클래스 파일을 엽니다.Then open the class file that has methods you want to test.

  2. 코드에서 메서드를 마우스 오른쪽 단추로 클릭하고 IntelliTest 실행 을 선택하여 메서드의 코드에 대한 단위 테스트를 생성합니다.Right-click in a method in your code and choose Run IntelliTest to generate unit tests for the code in your method.

    메서드를 마우스 오른쪽 단추로 클릭하여 단위 테스트 생성Right-click in your method to generate unit tests

    IntelliTest는 서로 다른 입력을 사용하여 코드를 여러 번 실행합니다.IntelliTest runs your code many times with different inputs. 각 실행은 입력 테스트 데이터 및 결과 출력 또는 예외와 함께 표에 나타납니다.Each run is represented in the table showing the input test data and the resulting output or exception.

    탐색 결과 창은 테스트와 함께 표시됨Exploration Results window is displayed with tests

    클래스의 모든 공용 메서드에 대해 단위 테스트를 생성하려는 경우 특정 메서드가 아니라 해당 클래스를 마우스 오른쪽 단추로 클릭하면 됩니다.To generate unit tests for all the public methods in a class, simply right-click in the class rather than a specific method. 그런 다음 IntelliTest 실행을 선택합니다.Then choose Run IntelliTest. 탐색 결과 창의 드롭다운 목록을 사용하여 클래스의 각 메서드에 대한 단위 테스트 및 입력 데이터를 표시합니다.Use the drop-down list in the Exploration Results window to display the unit tests and the input data for each method in the class.

    테스트 결과를 선택하여 목록에서 보기Select the test results to view from the list

    통과한 테스트의 경우, 결과 열에 보고된 결과가 코드에 대한 예상과 일치하는지 확인합니다.For tests that pass, check that the reported results in the result column match your expectations for your code. 테스트가 실패하는 경우 코드를 적절하게 수정하세요.For tests that fail, fix your code as appropriate. 그런 다음 IntelliTest를 다시 실행하여 수정 사항의 유효성을 검사합니다.Then rerun IntelliTest to validate the fixes.

유지: 단위 테스트를 재발 테스트 모음으로 저장Persist: Save the unit tests as a regression suite

  1. 매개 변수가 있는 단위 테스트와 함께 테스트 프로젝트에 저장할 데이터 행을 선택합니다.Select the data rows that you want to save with the parameterized unit test into a test project.

    테스트를 선택하고 마우스 오른쪽 단추로 클릭한 다음 저장 선택Select tests; right-click and choose Save

    생성된 매개 변수가 있는 단위 테스트 및 테스트 프로젝트를 볼 수 있습니다. 각 행에 해당하는 개별 단위 테스트는 테스트 프로젝트의 .g.cs 파일에 저장되고, 매개 변수가 있는 단위 테스트는 해당 .cs 파일에 저장됩니다.You can view the test project and the parameterized unit test that has been created - the individual unit tests, corresponding to each of the rows, are saved in the .g.cs file in the test project, and a parameterized unit test is saved in its corresponding .cs file. 수동으로 만든 단위 테스트와 마찬가지로 단위 테스트를 실행하고 테스트 탐색기에서 결과를 볼 수 있습니다.You can run the unit tests and view the results from Test Explorer just as you would for any unit tests that you created manually.

    테스트 메서드의 클래스 파일을 열어 단위 테스트 보기Open class file in test method to view unit test

    필요한 참조도 테스트 프로젝트에 추가됩니다.Any necessary references are also added to the test project.

    메서드 코드가 변경된 경우 IntelliTest를 다시 실행하여 단위 테스트를 변경 내용과 동기화합니다.If the method code changes, rerun IntelliTest to keep the unit tests in sync with the changes.

지원: IntelliTest를 사용하여 코드 탐색에 포커스 두기Assist: Use IntelliTest to focus code exploration

  1. 더 복잡한 코드가 있을 경우 IntelliTest에서는 코드의 탐색에 포커스를 두는 단계를 지원합니다.If you have more complex code, IntelliTest assists you with focusing exploration of your code. 예를 들어 인터페이스를 매개 변수로 사용하는 메서드가 있고 해당 인터페이스를 구현하는 클래스가 두 개 이상 있을 경우 IntelliTest는 이러한 클래스를 검색하고 경고를 보고합니다.For example, if you have a method that has an interface as a parameter, and there is more than one class that implements that interface, IntelliTest discovers those classes and reports a warning.

    경고를 보고 수행할 작업을 결정합니다.View the warnings to decide what you want to do.

    경고 보기View warnings

  2. 코드를 검토하고 테스트할 내용을 파악했으면 경고를 수정하여 인터페이스를 테스트하는 데 사용할 클래스를 선택할 수 있습니다.After you investigate the code and understand what you want to test, you can fix the warning to choose which classes to use to test the interface.

    경고를 마우스 오른쪽 단추로 클릭하고 수정 선택Right-click the warning and choose Fix

    선택한 클래스는 PexAssemblyInfo.cs 파일에 추가됩니다.This choice is added into the PexAssemblyInfo.cs file.

    [assembly: PexUseType(typeof(Camera))]

  3. 이제 IntelliTest를 다시 실행하여 수정한 클래스만 사용해 매개 변수가 있는 단위 테스트 및 테스트 데이터를 생성할 수 있습니다.Now you can rerun IntelliTest to generate a parameterized unit test and test data just using the class that you fixed.

    IntelliTest를 다시 실행하여 테스트 데이터 생성Rerun IntelliTest to generate the test data

선택: IntelliTest를 사용하여 코드에서 지정하는 정확성 속성의 유효성을 검사합니다.Specify: Use IntelliTest to validate correctness properties that you specify in code

생성된 단위 테스트를 통해 유효성을 검사할 입력과 출력 간의 일반적인 관계를 지정합니다.Specify the general relationship between inputs and outputs that you want the generated unit tests to validate. 이 사양은 테스트 메서드처럼 보이지만 전체적으로 수치화된 메서드에서 캡슐화됩니다.This specification is encapsulated in a method that looks like a test method but is universally quantified. 이것은 매개 변수가 있는 단위 테스트 메서드이며, 만든 모든 어설션은 IntelliTest에서 생성할 수 있는 모든 입력 값에 대해 적용되어야 합니다.This is the parameterized unit test method, and any assertions you make must hold for all possible input values that IntelliTest can generate.

Q: 비관리 코드에 IntelliTest를 사용할 수 있나요?Q: Can you use IntelliTest for unmanaged code?

A: 아니요. IntelliTest는 관리 코드를 대상으로만 작동됩니다.A: No, IntelliTest only works with managed code.

Q: 생성된 테스트가 통과하거나 실패하는 경우는 언제입니까?Q: When does a generated test pass or fail?

A: 예외가 발생하지 않을 경우에는 다른 단위 테스트처럼 통과합니다.A: It passes like any other unit test if no exceptions occur. 어설션이 실패하거나 테스트 중인 코드가 처리되지 않은 예외를 throw하는 경우에는 실패합니다.It fails if any assertion fails, or if the code under test throws an unhandled exception.

특정 예외가 throw되어도 성공할 수 있는 테스트가 있는 경우, 요구 사항에 따라 테스트 메서드, 테스트 클래스 또는 어셈블리 수준에서 다음 속성 중 하나를 설정할 수 있습니다.If you have a test that can pass if certain exceptions are thrown, you can set one of the following attributes based on your requirements at the test method, test class or assembly level:

  • PexAllowedExceptionAttributePexAllowedExceptionAttribute

  • PexAllowedExceptionFromTypeAttributePexAllowedExceptionFromTypeAttribute

  • PexAllowedExceptionFromTypeUnderTestAttributePexAllowedExceptionFromTypeUnderTestAttribute

  • PexAllowedExceptionFromAssemblyAttributePexAllowedExceptionFromAssemblyAttribute

Q: 매개 변수가 있는 단위 테스트에 가정을 추가할 수 있습니까?Q: Can I add assumptions to the parameterized unit test?

A: 예. 가정을 사용하여 특정 메서드에 대한 단위 테스트에 필요하지 않은 테스트 데이터를 지정할 수 있습니다.A: Yes, use assumptions to specify which test data is not required for the unit test for a specific method. 가정을 추가하려면 <xref:Microsoft.Pex.Framework.PexAssume> 클래스를 사용합니다.Use the <xref:Microsoft.Pex.Framework.PexAssume> class to add assumptions. 예를 들어 다음과 같이 lengths 변수가 null이 아니라는 가정을 추가할 수 있습니다.For example, you can add an assumption that the lengths variable is not null like this.

PexAssume.IsNotNull(lengths);

가정을 추가하고 IntelliTest를 다시 실행하면 더 이상 관련이 없는 테스트 데이터가 제거됩니다.If you add an assumption and rerun IntelliTest, the test data that is no longer relevant will be removed.

Q: 매개 변수가 있는 단위 테스트에 어설션을 추가할 수 있습니까?Q: Can I add assertions to the parameterized unit test?

A: 예. IntelliTest는 단위 테스트를 실행할 때 문에서 어설션된 항목이 실제로 올바른지 확인합니다.A: Yes, IntelliTest will check that what you are asserting in your statement is in fact correct when it runs the unit tests. 어설션을 추가하려면 테스트 프레임워크와 함께 제공되는 <xref:Microsoft.Pex.Framework.PexAssert> 클래스 또는 어설션 API를 사용합니다.Use the <xref:Microsoft.Pex.Framework.PexAssert> class or the assertion API that comes with the test framework to add assertions. 예를 들어 두 변수가 동일하다는 어설션을 추가할 수 있습니다.For example, you can add an assertion that two variables are equal.

PexAssert.AreEqual(a, b);

어설션을 추가하고 IntelliTest를 다시 실행하면 IntelliTest가 어설션이 유효한지 확인하고 유효하지 않을 경우 테스트가 실패합니다.If you add an assertion and rerun IntelliTest, it will check that your assertion is valid and the test fails if it is not.

Q: IntelliTest를 먼저 실행하지 않고 매개 변수가 있는 단위 테스트를 생성할 수 있나요?Q: Can I generate parameterized unit tests without running IntelliTest first?

A: 예, 클래스 또는 메서드를 마우스 오른쪽 단추로 클릭하고 IntelliTest 만들기를 선택합니다.A: Yes, right-click in the class or method, then choose Create IntelliTest.

편집기를 마우스 오른쪽 단추로 클릭하고 IntelliTest 만들기 선택Right-click editor, choose Create IntelliTest

기본 형식을 적용하여 테스트를 생성하거나 프로젝트 및 테스트 이름 지정 방법을 변경합니다.Accept the default format to generate your tests, or change how your project and tests are named. 새 테스트 프로젝트를 만들거나 기존 프로젝트에 테스트를 저장할 수 있습니다.You can create a new test project or save your tests to an existing project.

MSTest 기본값으로 IntelliTest 만들기Create IntelliTest with MSTest default

Q: IntelliTest와 함께 다른 단위 테스트 프레임워크를 사용할 수 있나요?Q: Can I use other unit test frameworks with IntelliTest?

A: 예, 다음 단계에 따라 다른 프레임워크를 찾아서 설치합니다.A: Yes, follow these steps to find and install other frameworks. 테스트 프레임워크 확장은 Visual Studio Marketplace에서도 사용할 수 있습니다.Test framework extensions are also available in Visual Studio Marketplace:

Visual Studio를 다시 시작하고 솔루션을 다시 연 후 클래스 또는 메서드를 마우스 오른쪽 단추로 클릭하고 IntelliTest 만들기를 선택합니다.After you restart Visual Studio and reopen your solution, right-click in the class or method, then choose Create IntelliTest. 여기서 설치된 프레임워크를 선택합니다.Select your installed framework here:

IntelliTest에 대한 다른 단위 테스트 프레임워크 선택Select other unit test framework for IntelliTest

그런 다음 IntelliTest를 실행하여 해당 .g.cs 파일에 개별 단위 테스트를 생성합니다.Then run IntelliTest to generate individual unit tests in their corresponding .g.cs files.

Q: 테스트가 생성되는 방식에 대해 자세히 알아볼 수 있나요?Q: Can I learn more about how the tests are generated?

A: 예, 개괄적인 개요를 확인하려면 이 블로그 게시물을 참조하세요.A: Yes, to get a high-level overview, read this blog post.