コード化された 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). Web ページ 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  

このクラスに適用される 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. この場合は、AddItemsParams クラスです。このクラスは UIMap.cs ファイルの後半で定義されているほか、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.

メソッド コードの先頭にあるのは Variable Declarations 領域です。ここでは、メソッドで使用される UI オブジェクトのローカル変数が定義されます。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

既定では、このファイルにはメソッドやプロパティを持たない 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

既定では、このファイルには 1 つのクラスのみの定義が含まれています。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. また、このクラスが部分クラスではないという点にも注意してください。Also notice that this is not a partial class. すべてのクラス コードがこのファイルに含まれています。All class code is contained in this file.

CodedUITest1 プロパティCodedUITest1 properties

このクラスには、ファイルの末尾にある 2 つの既定のプロパティが含まれています。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

既定では、このクラスに含まれているメソッドは 1 つだけです。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 というタイトルの領域には、コメント解除した場合、2 つの省略可能なメソッドが含まれます。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. このテストでは、CodedUITest1Method1() からではなく、UIMap.LaunchCalculator() メソッドは MyTestInitialize() から、UIMap.CloseCalculator() メソッドは MyTestCleanup() から、それぞれ呼び出すことができます。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