코딩된 UI 테스트 분석Anatomy of a Coded UI Test

코딩된 UI 테스트 프로젝트에서 코딩된 UI 테스트를 만들 때는 일부 파일이 솔루션에 추가됩니다.When you create a Coded UI Test in a coded UI test project, several files are added to your solution. 이 항목에서는 코딩된 UI 테스트 예제를 사용하여 이러한 파일을 탐색합니다.In this topic, we will use an example Coded UI Test to explore these files.

RequirementsRequirements

  • Visual Studio EnterpriseVisual Studio Enterprise

코딩된 UI 테스트 내용Contents of a Coded UI Test

코딩된 UI 테스트를 만드는 경우 코딩된 UI 테스트 빌더에서 테스트 대상 사용자 인터페이스 맵과 모든 테스트에 대한 테스트 메서드, 매개 변수 및 어설션을 만듭니다.When you create a Coded UI Test, the Coded UI Test Builder creates a map of the user interface under test, and also the test methods, parameters, and assertions for all tests. 각 테스트에 대한 클래스 파일도 만듭니다.It also creates a class file for each test.

파일File 목차Contents 편집 가능 여부Editable?
UIMap.Designer.csUIMap.Designer.cs 선언 섹션Declarations section

UIMap 클래스(부분, 자동 생성됨)UIMap class (partial, auto-generated)

메서드Methods

속성Properties
아니요No
UIMap.csUIMap.cs UIMap 클래스(부분)UIMap class (partial) Yes
CodedUITest1.csCodedUITest1.cs CodedUITest1 클래스CodedUITest1 class

메서드Methods

속성Properties
Yes
UIMap.uitestUIMap.uitest 테스트용 UI의 XML 맵The XML map of the UI for the test. 아니요No

UIMap.Designer.csUIMap.Designer.cs

이 파일에는 테스트를 만들 때 코딩된 UI 테스트 빌더에서 자동으로 생성되는 코드가 들어 있습니다.This file contains code that is automatically created by the Coded UI Test Builder when a test is created. 이 파일은 테스트가 변경될 때마다 다시 생성되므로 코드를 추가하거나 수정할 수 있는 파일이 아닙니다.This file is re-created every time that a test changes, so that it is not a file in which you can add or modify code.

선언 섹션Declarations section

이 섹션에는 Windows UI에 대한 다음 선언이 포함됩니다.This section includes the following declarations for a Windows UI.

using System;  
using System.CodeDom.Compiler;  
using System.Collections.Generic;  
using System.Drawing;  
using System.Text.RegularExpressions;  
using System.Windows.Input;  
using Microsoft.VisualStudio.TestTools.UITest.Extension;  
using Microsoft.VisualStudio.TestTools.UITesting;  
using Microsoft.VisualStudio.TestTools.UITesting.WinControls;  
using Microsoft.VisualStudio.TestTools.UnitTesting;  
using Keyboard = Microsoft.VisualStudio.TestTools.UITesting.Keyboard;  
using Mouse = Microsoft.VisualStudio.TestTools.UITesting.Mouse;  
using MouseButtons = System.Windows.Forms.MouseButtons;  

<xref:Microsoft.VisualStudio.TestTools.UITesting.WinControls> 네임스페이스는 Windows UI(사용자 인터페이스)용으로 포함되었습니다.The <xref:Microsoft.VisualStudio.TestTools.UITesting.WinControls> namespace is included for a Windows user interface (UI). 웹 페이지 UI의 경우 네임스페이스는 <xref:Microsoft.VisualStudio.TestTools.UITesting.HtmlControls>입니다. Windows Presentation Foundation UI의 경우 네임스페이스는 <xref:Microsoft.VisualStudio.TestTools.UITesting.WpfControls>입니다.For a Web page UI, the namespace would be <xref:Microsoft.VisualStudio.TestTools.UITesting.HtmlControls>; for a Windows Presentation Foundation UI, the namespace would be <xref:Microsoft.VisualStudio.TestTools.UITesting.WpfControls>.

UIMap 클래스UIMap class

파일의 다음 섹션은 <xref:Microsoft.VisualStudio.TestTools.UITest.Common.UIMap.UIMap> 클래스입니다.The next section of the file is the <xref:Microsoft.VisualStudio.TestTools.UITest.Common.UIMap.UIMap> class.

[GeneratedCode("Coded UITest Builder", "10.0.21221.0")]  
public partial class UIMap  

클래스 코드는 partial 클래스로 선언된 클래스에 적용되는 GeneratedCodeAttribute로 시작합니다.The class code starts with a GeneratedCodeAttribute that is applied to the class, which is declared as a partial class. 이 파일의 모든 클래스에도 특성이 적용되는 것을 확인할 수 있습니다.You will notice that the attribute is also applied to every class in this file. 이 클래스에 대한 더 많은 코드를 포함할 수 있는 다른 파일은 뒷부분에 설명하는 UIMap.cs입니다.The other file that can contain more code for this class is UIMap.cs, which is discussed later.

생성된 UIMap 클래스에는 테스트를 기록할 때 지정된 각 메서드에 대한 코드가 포함됩니다.The generated UIMap class includes code for each method that was specified when the test was recorded.

public void LaunchCalculator()  
public void AddItems()  
public void VerifyTotal()  
public void CleanUp()  

<xref:Microsoft.VisualStudio.TestTools.UITest.Common.UIMap.UIMap> 클래스의 이 부분에는 메서드에 필요한 각 속성에 대해 생성된 코드도 포함됩니다.This part of the <xref:Microsoft.VisualStudio.TestTools.UITest.Common.UIMap.UIMap> class also includes the generated code for each property that is required by the methods.

public virtual LaunchCalculatorParams LaunchCalculatorParams  
public virtual AddItemsParams AddItemsParams  
public virtual VerifyTotalExpectedValues VerifyTotalExpectedValues  
public virtual CalculateItemsParams CalculateItemsParams  
public virtual VerifyMathAppTotalExpectedValues   
    VerifyMathAppTotalExpectedValues  
public UIStartMenuWindow UIStartMenuWindow  
public UIRunWindow UIRunWindow  
public UICalculatorWindow UICalculatorWindow  
public UIStartWindow UIStartWindow  
public UIMathApplicationWindow UIMathApplicationWindow  
UIMap 메서드UIMap methods

각 메서드는 AddItems() 메서드와 유사한 구조입니다.Each method has a structure that resembles the AddItems() method. 이 내용은 보다 명확하도록 줄 바꿈과 함께 표시되는 코드 아래에서 자세히 설명합니다.This is explained in more detail under the code, which is presented together with line breaks to add clarity.

/// <summary>  
/// AddItems - Use 'AddItemsParams' to pass parameters into this method.  
/// </summary>  
public void AddItems()  
{  
    #region Variable Declarations  
    WinControl uICalculatorDialog =   
        this.UICalculatorWindow.UICalculatorDialog;  
    WinEdit uIItemEdit =   
        this.UICalculatorWindow.UIItemWindow.UIItemEdit;  
    #endregion  

    // Type '{NumPad7}' in 'Calculator' Dialog  
    Keyboard.SendKeys(uICalculatorDialog,   
        this.AddItemsParams.UICalculatorDialogSendKeys,   
        ModifierKeys.None);  

    // Type '{Add}{NumPad2}{Enter}' in 'Unknown Name' text box  
    Keyboard.SendKeys(uIItemEdit,   
        this.AddItemsParams.UIItemEditSendKeys,   
        ModifierKeys.None);  
}  

각 메서드 정의에 대한 요약 설명에서는 해당 메서드의 매개 변수 값에 사용할 클래스를 지시합니다.The summary comment for each method definition tells which class to use for parameter values for that method. 이 경우 UIMap.cs 파일의 뒷부분에서 정의되고 AddItemsParams 속성에서 반환되는 값 형식이기도 한 AddItemsParams 클래스입니다.In this case, it is the AddItemsParams class, which is defined later in the UIMap.cs file, and which is also the value type that is returned by the AddItemsParams property.

메서드 코드 맨 위에는 메서드에서 사용할 UI 개체에 대한 지역 변수를 정의하는 Variable Declarations 영역이 있습니다.At the top of the method code is a Variable Declarations region that defines local variables for the UI objects that will be used by the method.

이 메서드에서 UIItemWindowUIItemEdit는 둘 다 UIMap.cs 파일의 뒷부분에서 정의되는 UICalculatorWindow 클래스를 사용하여 액세스할 수 있는 속성입니다.In this method, both UIItemWindow and UIItemEdit are properties that are accessed by using the UICalculatorWindow class, which is defined later in the UIMap.cs file.

다음은 AddItemsParams 개체의 속성을 사용하여 키보드에서 계산기 응용 프로그램으로 텍스트를 보내는 줄입니다.Next are lines that send text from the keyboard to the Calculator application by using properties of the AddItemsParams object.

VerifyTotal() 메서드는 구조가 매우 유사하며 다음과 같은 어설션 코드를 포함합니다.The VerifyTotal() method has a very similar structure, and includes the following assertion code.

// Verify that 'Unknown Name' text box's property 'Text' equals '9. '  
Assert.AreEqual(  
    this.VerifyTotalExpectedValues.UIItemEditText,   
    uIItemEdit.Text);  

Windows 계산기 응용 프로그램의 개발자가 공개적으로 사용할 수 있는 컨트롤 이름을 제공하지 않으므로 텍스트 상자 이름은 알 수 없음으로 나열됩니다.The text box name is listed as unknown because the developer of the Windows Calculator application did not provide a publicly available name for the control. 실제 값이 예상 값과 같지 않은 경우 <xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual%2A?displayProperty=fullName> 메서드가 실패하여 테스트에 실패합니다.The <xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual%2A?displayProperty=fullName> method fails when the actual value is not equal to the expected value, which would cause the test to fail. 또한 예상 값은 소수점 뒤에 공백을 포함합니다.Also notice that the expected value includes a decimal point that is followed by a space. 이 특정 테스트의 기능을 수정해야 하는 경우 해당 소수점과 공백을 허용해야 합니다.If you ever have to modify the functionality of this particular test, you must allow for that decimal point and the space.

UIMap 속성UIMap properties

각 속성에 대한 코드도 클래스 전체에서 매우 표준적입니다.The code for each property is also very standard throughout the class. AddItemsParams 속성에 대한 다음 코드는 AddItems() 메서드에서 사용됩니다.The following code for the AddItemsParams property is used in the AddItems() method.

public virtual AddItemsParams AddItemsParams  
{  
    get  
    {  
        if ((this.mAddItemsParams == null))  
        {  
            this.mAddItemsParams = new AddItemsParams();  
        }  
        return this.mAddItemsParams;  
    }  
}  

속성은 값을 반환하기 전에 mAddItemsParams라는 전용 지역 변수를 사용하여 보유합니다.Notice that the property uses a private local variable that is named mAddItemsParams to hold the value before it returns it. 반환하는 개체의 속성 이름과 클래스 이름은 같습니다.The property name and the class name for the object it returns are the same. 클래스는 UIMap.cs 파일의 뒷부분에서 정의됩니다.The class is defined later in the UIMap.cs file.

속성에서 반환되는 각 클래스는 구조가 유사합니다.Each class that is returned by a property is structured similarly. 다음은 AddItemsParams 클래스입니다.The following is the AddItemsParams class.

/// <summary>  
/// Parameters to be passed into 'AddItems'  
/// </summary>  
[GeneratedCode("Coded UITest Builder", "10.0.21221.0")]  
public class AddItemsParams  
{  
    #region Fields  
    /// <summary>  
    /// Type '{NumPad7}' in 'Calculator' Dialog  
    /// </summary>  
    public string UICalculatorDialogSendKeys = "{NumPad7}";  

    /// <summary>  
    /// Type '{Add}{NumPad2}{Enter}' in 'Unknown Name' text box  
    /// </summary>  
    public string UIItemEditSendKeys = "{Add}{NumPad2}{Enter}";  
    #endregion  
}  

UIMap.cs 파일의 모든 클래스와 마찬가지로, 이 클래스는 GeneratedCodeAttribute로 시작합니다.As with all classes in the UIMap.cs file, this class starts with the GeneratedCodeAttribute. 이 작은 클래스에는 앞에서 설명한 UIMap.AddItems() 메서드에서 사용되는 <xref:Microsoft.VisualStudio.TestTools.UITesting.Keyboard.SendKeys%2A?displayProperty=fullName> 메서드의 매개 변수로 사용할 문자열을 정의하는 Fields 영역이 있습니다.In this small class is a Fields region that defines the strings to use as parameters for the <xref:Microsoft.VisualStudio.TestTools.UITesting.Keyboard.SendKeys%2A?displayProperty=fullName> method that is used in the UIMap.AddItems() method that was discussed earlier. 이러한 매개 변수가 사용되는 메서드를 호출하기 전에 해당 문자열 필드의 값을 바꾸는 코드를 작성할 수 있습니다.You can write code to replace the values in these string fields before the method in which these parameters are used is called.

UIMap.csUIMap.cs

기본적으로 이 파일은 메서드나 속성이 없는 partial UIMap 클래스를 포함합니다.By default, this file contains a partial UIMap class that has no methods or properties.

UIMap 클래스UIMap class

여기서 사용자 지정 코드를 만들어 <xref:Microsoft.VisualStudio.TestTools.UITest.Common.UIMap.UIMap> 클래스의 기능을 확장할 수 있습니다.This is where you can create custom code to extend the functionality of the <xref:Microsoft.VisualStudio.TestTools.UITest.Common.UIMap.UIMap> class. 이 파일에 만드는 코드는 테스트를 수정할 때마다 코딩된 UI 테스트 빌더에서 다시 생성되지 않습니다.The code that you create in this file will not be regenerated by the Coded UI Test Builder every time that a test is modified.

<xref:Microsoft.VisualStudio.TestTools.UITest.Common.UIMap.UIMap>의 모든 부분에서 <xref:Microsoft.VisualStudio.TestTools.UITest.Common.UIMap.UIMap> 클래스의 다른 부분에 있는 메서드와 속성을 사용할 수 있습니다.All parts of the <xref:Microsoft.VisualStudio.TestTools.UITest.Common.UIMap.UIMap> can use the methods and properties from any other part of the <xref:Microsoft.VisualStudio.TestTools.UITest.Common.UIMap.UIMap> class.

CodedUITest1.csCodedUITest1.cs

이 파일은 코딩된 UI 테스트 빌더에서 생성되지만 테스트를 수정할 때마다 다시 생성되지 않으므로 이 파일의 코드를 수정할 수 있습니다.This file is generated by the Coded UI Test Builder, but is not re-created every time that the test is modified, so that you can modify the code in this file. 파일 이름은 테스트를 만들 때 지정한 테스트 이름에서 생성됩니다.The name of the file is generated from the name that you specified for the test when you created it.

CodedUITest1 클래스CodedUITest1 class

기본적으로 이 파일은 하나의 클래스에 대한 정의만 포함합니다.By default, this file contains the definition for only one class.

[CodedUITest]  
public class CodedUITest1  

T:Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute가 클래스에 자동으로 적용되어 테스트 프레임워크에서 해당 클래스를 테스트 확장으로 인식할 수 있게 합니다.The T:Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute is automatically applied to the class, which allows the testing framework to recognize it as a testing extension. 또한 partial 클래스가 아닙니다.Also notice that this is not a partial class. 모든 클래스 코드가 이 파일에 포함됩니다.All class code is contained in this file.

CodedUITest1 속성CodedUITest1 properties

클래스는 파일 맨 아래에 있는 두 개의 기본 속성을 포함합니다.The class contains two default properties that are located at the bottom of the file. 속성을 수정하면 안 됩니다.They must not be modified.

/// <summary>  
/// Gets or sets the test context which provides  
/// information about and functionality for the current test run.  
///</summary>  
public TestContext TestContext  
public UIMap UIMap  
CodedUITest1 메서드CodedUITest1 methods

기본적으로 클래스는 하나의 메서드만 포함합니다.By default, the class contains only one method.

public void CodedUITestMethod1()  

이 메서드는 테스트를 기록할 때 지정한 각 UIMap 메서드를 호출합니다. 해당 메서드는 UIMap 클래스에 대한 섹션에서 설명합니다.This method calls each UIMap method that you specified when you recorded your test, which is described in the section on the UIMap Class.

주석 처리가 제거된 경우 Additional test attributes라는 영역은 두 개의 선택적 메서드를 포함합니다.A region that is titled Additional test attributes, if uncommented, contains two optional methods.

// Use TestInitialize to run code before running each test   
[TestInitialize()]  
public void MyTestInitialize()  
{  
    // To generate code for this test, select "Generate Code for Coded   
    // UI Test" from the shortcut menu and select one of the menu items.  
    // For more information on generated code, see   
    // http://go.microsoft.com/fwlink/?LinkId=179463  

    // You could move this line from the CodedUITestMethod1() method  
    this.UIMap.LaunchCalculator();  
}  

// Use TestCleanup to run code after each test has run  
[TestCleanup()]  
public void MyTestCleanup()  
{  
    // To generate code for this test, select "Generate Code for Coded   
    // UI Test" from the shortcut menu and select one of the menu items.  
    // For more information on generated code, see   
    // http://go.microsoft.com/fwlink/?LinkId=179463  

    // You could move this line from the CodedUITestMethod1() method  
    this.UIMap.CloseCalculator();  
}  

MyTestInitialize() 메서드에는 다른 테스트 메서드보다 먼저 이 메서드를 호출하도록 테스트 프레임워크에 지시하는 <xref:Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute>가 적용되어 있습니다.The MyTestInitialize() method has the <xref:Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute> applied to it, which tells the testing framework to call this method before any other test methods. 마찬가지로, MyTestCleanup() 메서드에는 다른 테스트 메서드가 모두 호출된 후 이 메서드를 호출하도록 테스트 프레임워크에 지시하는 <xref:Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute>가 적용되어 있습니다.Similarly, the MyTestCleanup() method has the <xref:Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute> applied to it, which tells the testing framework to call this method after all other test methods have been called. 이러한 메서드 사용은 선택 사항입니다.Use of these methods is optional. 이 테스트를 위해 MyTestInitialize()에서 UIMap.LaunchCalculator() 메서드를 호출할 수 있고, CodedUITest1Method1() 대신 MyTestCleanup()에서 UIMap.CloseCalculator() 메서드를 호출할 수 있습니다.For this test, the UIMap.LaunchCalculator() method could be called from MyTestInitialize() and the UIMap.CloseCalculator() method could be called from MyTestCleanup() instead of from CodedUITest1Method1().

<xref:Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute>를 사용하여 이 클래스에 더 많은 메서드를 추가하는 경우 테스트 프레임워크에서 테스트의 일부로 각 메서드를 호출합니다.If you add more methods to this class by using the <xref:Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute>, the testing framework will call each method as part of the test.

UIMap.uitestUIMap.uitest

코딩된 UI 테스트 기록의 구조 및 모든 해당 부분을 나타내는 XML 파일입니다.This is an XML file that represents the structure of the coded UI test recording and all its parts. 여기에는 작업 및 클래스와 해당 클래스의 메서드 및 속성도 포함됩니다.These include the actions and the classes in addition to the methods and properties of those classes. UIMap.Designer.cs 파일은 코딩된 UI 빌더에서 테스트 구조를 재현하기 위해 생성되고, 테스트 프레임워크에 대한 연결을 제공하는 코드를 포함합니다.The UIMap.Designer.cs file contains the code that is generated by the Coded UI Builder to reproduce the structure of the test and provides the connection to the testing framework.

UIMap.uitest 파일은 직접 편집할 수 없습니다.The UIMap.uitest file is not directly editable. 그러나 코딩된 UI 빌더를 사용하여 테스트를 수정할 수 있으며, UIMap.uitest 파일과 UIMap.Designer.cs 파일이 자동으로 수정됩니다.However, you can use the Coded UI Builder to modify the test, which automatically modifies the UIMap.uitest file and the UIMap.Designer.cs file.

참고 항목See Also

<xref:Microsoft.VisualStudio.TestTools.UITest.Common.UIMap.UIMap><xref:Microsoft.VisualStudio.TestTools.UITest.Common.UIMap.UIMap>
<xref:Microsoft.VisualStudio.TestTools.UITesting.WinControls><xref:Microsoft.VisualStudio.TestTools.UITesting.WinControls>
<xref:Microsoft.VisualStudio.TestTools.UITesting.HtmlControls><xref:Microsoft.VisualStudio.TestTools.UITesting.HtmlControls>
<xref:Microsoft.VisualStudio.TestTools.UITesting.WpfControls><xref:Microsoft.VisualStudio.TestTools.UITesting.WpfControls>
GeneratedCodeAttributeGeneratedCodeAttribute
<xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual%2A?displayProperty=fullName><xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual%2A?displayProperty=fullName>
<xref:Microsoft.VisualStudio.TestTools.UITesting.Keyboard.SendKeys%2A?displayProperty=fullName><xref:Microsoft.VisualStudio.TestTools.UITesting.Keyboard.SendKeys%2A?displayProperty=fullName>
<xref:Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute><xref:Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute>
<xref:Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute><xref:Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute>
<xref:Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute><xref:Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute>
UI 자동화를 사용하여 코드 테스트 Use UI Automation To Test Your Code
코딩된 UI 테스트 만들기 Creating Coded UI Tests
코딩된 UI 테스트에 대한 모범 사례 Best Practices for Coded UI Tests
여러 UI 맵이 포함된 대형 응용 프로그램 테스트 Testing a Large Application with Multiple UI Maps
코딩된 UI 테스트 및 작업 기록에 지원되는 구성 및 플랫폼Supported Configurations and Platforms for Coded UI Tests and Action Recordings