코딩된 UI 테스트 분석

테스트 프로젝트에 코딩된 UI 테스트를 만들면 솔루션에 몇 개의 파일이 추가됩니다. 이 항목에서는 코딩된 UI 테스트 예제를 사용하여 이러한 파일을 알아봅니다.

코딩된 UI 테스트의 내용

코딩된 UI 테스트를 만들면 코딩된 UI 테스트 빌더가 테스트 대상 사용자 인터페이스의 맵과 모든 테스트에 대한 테스트 메서드, 매개 변수 및 어설션을 만듭니다. 또한 각 테스트에 대한 클래스 파일도 만듭니다.

파일

내용

편집 가능 여부

UIMap.Designer.cs

선언 섹션

UIMap 클래스(partial, 자동 생성됨)

메서드

속성

아니요

UIMap.cs

UIMap 클래스(partial)

CodedUITest1.cs

CodedUITest1 클래스

메서드

속성

UIMap.uitest

테스트할 UI의 XML 맵

아니요

UIMap.Designer.cs

이 파일에는 테스트를 만들 때 코딩된 UI 테스트 빌더에 의해 자동으로 만들어진 코드가 포함됩니다. 이 파일은 테스트가 변경될 때마다 다시 만들어지므로 사용자가 코드를 추가하거나 수정할 수 있는 파일이 아닙니다.

선언 섹션

이 섹션에는 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;

Microsoft.VisualStudio.TestTools.UITesting.WinControls 네임스페이스는 Windows UI(사용자 인터페이스)의 경우에 포함됩니다. 이 네임스페이스는 웹 페이지 UI의 경우 Microsoft.VisualStudio.TestTools.UITesting.HtmlControls이고, Windows Presentation Foundation UI의 경우 Microsoft.VisualStudio.TestTools.UITesting.WpfControls입니다.

UIMap 클래스

이 파일의 다음 섹션은 UIMap 클래스입니다.

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

클래스 코드는 partial 클래스로 선언된 클래스에 적용되는 GeneratedCodeAttribute로 시작합니다. 이 특성은 이 파일의 모든 클래스에도 적용됩니다. 이 클래스에 대한 더 많은 코드를 포함할 수 있는 다른 파일은 뒷부분에 설명된 UIMap.cs입니다.

생성된 UIMap 클래스에는 테스트를 기록할 때 지정된 각 메서드에 대한 코드가 포함됩니다.

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

UIMap 클래스의 이 부분에는 메서드에 필요한 각 속성에 대해 생성된 코드도 포함됩니다.

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 메서드

각 메서드는 AddItems() 메서드와 구조가 유사합니다. 이 메서드는 코드 아래에 보다 자세히 설명되어 있으며, 이러한 주석 부분은 읽기 쉽도록 줄 바꿈과 함께 표시됩니다.

/// <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);
}

각 메서드 정의에 대한 요약 주석에서는 해당 메서드의 매개 변수 값에 사용할 클래스를 알려 줍니다. 이 경우에는 UIMap.cs 파일의 뒷부분에 정의되며 AddItemsParams 속성에서 반환된 값 형식인 AddItemsParams 클래스가 이에 해당합니다.

메서드 코드의 맨 위에는 메서드에서 사용할 UI 개체의 지역 변수를 정의하는 Variable Declarations 영역이 있습니다.

이 메서드에서 UIItemWindow와 UIItemEdit는 모두 UICalculatorWindow 클래스를 사용하여 액세스할 수 있으며 UIMap.cs 파일의 뒷부분에 정의된 속성입니다.

다음 줄에서는 AddItemsParams 개체의 속성을 사용하여 키보드에서 계산기 응용 프로그램으로 텍스트를 보냅니다.

VerifyTotal() 메서드는 매우 유사한 구조를 가지며 다음과 같은 어설션 코드를 포함합니다.

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

Windows 계산기 응용 프로그램의 개발자가 컨트롤에 대해 공개적으로 사용할 수 있는 이름을 제공하지 않았으므로 텍스트 상자 이름은 알 수 없는 것으로 표시됩니다. 실제 값이 예상 값과 같지 않으면 Assert.AreEqual 메서드가 실패하고 그 결과 테스트가 실패하게 됩니다. 또한 예상 값에는 소수점과 그 뒤의 공백이 포함됩니다. 이 특정 테스트의 기능을 수정해야 하는 경우에도 이 소수점과 공백은 허용해야 합니다.

UIMap 속성

각 속성에 대한 코드는 클래스 전체에서 매우 표준적이기도 합니다. AddItemsParams 속성의 다음 코드는 AddItems() 메서드에 사용됩니다.

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

이 속성은 값을 반환하기 전에 mAddItemsParams라는 전용 지역 변수를 사용하여 값을 보관합니다. 이 속성이 반환하는 개체의 속성 이름과 클래스 이름은 동일합니다. 이 클래스는 UIMap.cs 파일의 뒷부분에 정의됩니다.

속성에서 반환되는 각 클래스는 구조가 유사합니다. 다음은 AddItemsParams 클래스입니다.

/// <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로 시작합니다. 이 작은 클래스에는 Fields 영역이 있으며 이 영역에서는 앞에 설명된 UIMap.AddItems() 메서드에 사용되는 Keyboard.SendKeys 메서드의 매개 변수로 사용할 문자열을 정의합니다. 이러한 매개 변수가 사용되는 메서드가 호출되기 전에 이러한 문자열 필드의 값을 바꾸는 코드를 작성할 수 있습니다.

UIMap.cs

기본적으로 이 파일에는 메서드나 속성이 없는 partial UIMap 클래스가 포함됩니다.

UIMap 클래스

이 클래스에서 UIMap 클래스의 기능을 확장하는 사용자 지정 코드를 만들 수 있습니다. 이 파일에 만드는 코드는 테스트가 수정될 때마다 코딩된 UI 테스트 빌더에서 다시 생성되지 않습니다.

UIMap의 모든 부분에서 UIMap 클래스의 다른 부분에 사용된 메서드와 속성을 사용할 수 있습니다.

CodedUITest1.cs

이 파일은 코딩된 UI 테스트 빌더에서 생성되지만, 테스트가 수정될 때마다 다시 만들어지지는 않으므로 이 파일의 코드를 수정할 수 있습니다. 파일 이름은 테스트를 만들 때 테스트에 대해 지정한 이름을 따서 생성됩니다.

CodedUITest1 클래스

기본적으로 이 파일에는 하나의 클래스에 대한 정의만 포함됩니다.

[CodedUITest]
public class CodedUITest1

이 클래스에는 T:Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute가 자동으로 적용되므로 테스트 프레임워크에서 이 클래스가 테스트 확장으로 인식됩니다. 또한 이 클래스는 partial 클래스가 아니므로 모든 클래스 코드가 이 파일에 포함됩니다.

CodedUITest1 속성

이 클래스에는 파일의 아래쪽에 있는 두 개의 기본 속성이 포함됩니다. 이러한 속성은 수정하면 안 됩니다.

/// <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 메서드

기본적으로 이 클래스에는 하나의 메서드만 포함됩니다.

public void CodedUITestMethod1()

이 메서드는 테스트를 기록할 때 지정한 각 UIMap 메서드(UIMap 클래스 단원에서 설명)를 호출합니다.

주석 처리를 제거한 경우 Additional test attributes라는 제목의 영역에는 두 개의 선택적 메서드가 포함됩니다.

// 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 
    // https://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 
    // https://go.microsoft.com/fwlink/?LinkId=179463

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

MyTestInitialize() 메서드에는 테스트 프레임워크가 다른 테스트 메서드를 호출하기 전에 이 메서드를 호출하도록 지정하는 TestInitializeAttribute가 적용됩니다. 마찬가지로 MyTestCleanup() 메서드에는 테스트 프레임워크가 다른 모든 테스트 메서드를 호출한 후 이 메서드를 호출하도록 지정하는 TestCleanupAttribute가 적용됩니다. 이러한 메서드는 선택적으로 사용할 수 있습니다. 이 테스트의 경우 UIMap.LaunchCalculator() 메서드는 MyTestInitialize()에서 호출할 수 있고, UIMap.CloseCalculator() 메서드는 CodedUITest1Method1() 대신 MyTestCleanup()에서 호출할 수 있습니다.

CodedUITestAttribute를 사용하여 이 클래스에 다른 메서드를 추가하면 테스트 프레임워크에서는 테스트의 일부로 각 메서드를 호출합니다.

UIMap.uitest

이 파일은 코딩된 UI 테스트 기록의 구조와 모든 부분을 나타내는 XML 파일입니다. 여기에는 동작 및 클래스뿐 아니라 해당 클래스의 메서드와 속성도 포함됩니다. UIMap.Designer.cs 파일에는 코딩된 UI 테스트 빌더에서 테스트의 구조를 재현하고 테스트 프레임워크에 대한 연결을 제공하기 위해 생성한 코드가 포함됩니다.

UIMap.uitest 파일은 직접 편집할 수 없습니다. 그러나 코딩된 UI 테스트 빌더를 사용하여 테스트를 수정할 수 있으며, 이 경우 UIMap.uitest 파일과 UIMap.Designer.cs 파일이 자동으로 수정됩니다.

참고 항목

작업

방법: 코딩된 UI 테스트 만들기

방법: 코딩된 UI 테스트 빌더를 사용하여 UI 컨트롤 및 유효성 검사 코드 추가

참조

UIMap

Microsoft.VisualStudio.TestTools.UITesting.WinControls

Microsoft.VisualStudio.TestTools.UITesting.HtmlControls

Microsoft.VisualStudio.TestTools.UITesting.WpfControls

GeneratedCodeAttribute

Assert.AreEqual

Keyboard.SendKeys

CodedUITestAttribute

TestInitializeAttribute

TestCleanupAttribute

개념

최선의 코딩된 UI 테스트 방법

코딩된 UI 테스트 및 작업 기록에 지원되는 구성 및 플랫폼

기타 리소스

여러 UI 맵이 포함된 대형 응용 프로그램 테스트