次の方法で共有


コード化された UI テストの構造

コード化された UI テスト プロジェクトでコード化された UI テストの作成時に、ソリューションにいくつかのファイルが追加されます。このトピックでは、これらのファイルを説明するため、コード化された UI テストの例を使用します。

要件

  • Visual Studio Ultimate, Visual Studio Premium

コード化された UI テストの内容

コード化された UI テストを作成するときは、コード化された UI テスト ビルダーによって、すべてのテストについて、テスト対象ユーザー インターフェイスのマップが作成されると共に、テスト メソッド、パラメーター、アサーションのマップも作成されます。また、各テストのクラス ファイルも作成されます。

File

内容

編集可能かどうか

UIMap.Designer.cs

宣言セクション

UIMap クラス (部分クラス、自動生成)

メソッド

プロパティ

No

UIMap.cs

UIMap クラス (部分クラス)

Yes

CodedUITest1.cs

CodedUITest1 クラス

メソッド

プロパティ

Yes

UIMap.uitest

テストの UI の XML マップ

No

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;

Windows ユーザー インターフェイス (UI) には、Microsoft.VisualStudio.TestTools.UITesting.WinControls 名前空間が含まれています。Web ページ 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

クラス コードは、このクラスに適用される 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);
}

各メソッド定義の概要コメントで、メソッドのパラメーター値として使用されるクラスを示しています。この場合、AddItemsParams クラスになります。このクラスが後で UIMap.cs ファイルで定義され、さらに AddItemsParams プロパティによって返される値の型となります。

メソッドのコードの先頭にあるのは Variable Declarations 領域です。ここで、メソッドで使用される UI オブジェクトのローカル変数を定義します。

このメソッドでは、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 で始まります。この小さなクラスは、前に説明した UIMap.AddItems() メソッドで使用される Keyboard.SendKeys メソッドのパラメーターとして使用する文字列を定義する Fields 領域です。これらのパラメーターを使用するメソッドの呼び出し前にこれらの文字列フィールドの値を置き換えるためのコードを記述できます。

UIMap.cs

既定では、このファイルは、メソッドやプロパティのない UIMap 部分クラスを含んでいます。

UIMap クラス

ここでは、UIMap クラスの機能を拡張するためのカスタム コードを作成できます。このファイルで作成するコードは、テストが変更されるたびにコード化された UI テスト ビルダーによって再生成されるわけではありません。

UIMap のすべての部分で、UIMap クラスの他のすべての部分のメソッドとプロパティを使用できます。

CodedUITest1.cs

このファイルはコード化された UI テスト ビルダーによって生成されますが、テストが変更されるたびに再生成されるわけではありません。したがって、このファイルではコードを変更できます。ファイルの名前は、テストの作成時にテストに指定した名前から生成されます。

CodedUITest1 クラス

既定では、このファイルは 1 つのクラスのみの定義を含んでいます。

[CodedUITest]
public class CodedUITest1

T:Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute がクラスに自動的に適用され、テスト フレームワークでテストの拡張として認識できるようになります。また、部分クラスでないことも認識されます。すべてのクラス コードがこのファイルに含まれます。

CodedUITest1 プロパティ

このクラスでは、2 つの既定のプロパティがファイルの末尾に含まれています。これらのプロパティは変更しないでください。

/// <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 メソッド

既定では、このクラスに含まれるメソッドは 1 つだけです。

public void CodedUITestMethod1()

このメソッドは、テストの記録時に指定したそれぞれの UIMap メソッド (UIMap クラスに関するセクションを参照) を呼び出します。

コメントを解除すると、Additional test attributes というタイトルの領域に、2 つのオプションのメソッドが含まれます。

// 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 が適用されています。これにより、テスト フレームワークは、他のテスト メソッドがすべて呼び出された後でこのメソッドを呼び出します。これらのメソッドの使用は省略可能です。このテストでは、CodedUITest1Method1() を使用せずに、UIMap.LaunchCalculator() メソッドは MyTestInitialize() から、UIMap.CloseCalculator() メソッドは MyTestCleanup() から、それぞれ呼び出すことができます。

CodedUITestAttribute を使用してこのクラスにさらにメソッドを追加した場合、テスト フレームワークはテストの一部として各メソッドを呼び出します。

UIMap.uitest

これは、コード化された UI テストの記録およびそのすべての部分の構造体を表す XML ファイルです。アクションとクラス、およびクラスのメソッドとプロパティが含まれます。UIMap.Designer.cs ファイルは、コード化された UI ビルダーによって生成されたコードを含み、テストの構造体を再現し、テスト フレームワークへの接続を可能にします。

UIMap.uitest ファイルは直接編集できません。ただし、コード化された UI ビルダーを使用してテストを変更することはできます。これにより、UIMap.uitest ファイルおよび UIMap.Designer.cs ファイルは自動的に変更されます。

参照

関連項目

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 マップでの大規模アプリケーションのテスト

コード化された UI テストと操作の記録でサポートされている構成とプラットフォーム

その他の技術情報

コード化された UI テストを作成する