コントロールのコード化された UI テストの有効化Enable Coded UI testing of your controls

コード化された UI テスト フレームワークのサポートを実装すると、コントロールがテストしやすくなります。Implement support for the coded UI testing framework to make your control more testable. サポート レベルを徐々に上げることができます。You can add increasing levels of support incrementally. 記録と再生およびプロパティの検証のサポートから始めます。Start by supporting record and playback and property validation. 次に、そのサポートに基づき、コード化された UI テスト ビルダーを有効にし、コントロールのカスタム プロパティを認識します。Then, build on that to enable the coded UI test builder to recognize your control's custom properties. 生成されたコードからそれらのプロパティにアクセスするためのカスタム クラスを提供します。Provide custom classes to access those properties from generated code. また、コード化された UI テスト ビルダーが、記録される操作の目的に近い方法で操作をキャプチャできるようにすることもできます。You can also help the coded UI test builder capture actions in a way that is closer to the intent of the action being recorded.

CUIT_Full

アクセシビリティの実装によって記録と再生およびプロパティの検証をサポートするSupport record and playback and property validation by implementing accessibility

コード化された UI テスト ビルダーは、記録時に出現したコントロールに関する情報をキャプチャし、そのセッションを再生するコードを生成します。The coded UI test builder captures information about the controls that it encounters during a recording and then generates code to replay that session. コントロールがアクセシビリティをサポートしていない場合、コード化された UI テスト ビルダーは画面座標を使用して操作 (マウス クリックなど) をキャプチャします。If your control doesn't support accessibility, then the coded UI test builder captures actions (like mouse clicks) using screen coordinates. テストの再生時、生成されたコードは同じ画面座標にアクションを表示します。When the test is played back, the generated code issues the actions in the same screen coordinates. テストの再生時にコントロールが画面上の別の場所に表示される場合、生成されたコードは操作の実行に失敗します。If your control appears in a different place on the screen when the test is played back, the generated code will fail to perform the action. コントロールのアクセシビリティを実装しないとき、異なる画面構成や異なる環境でテストを再生したとき、あるいは UI レイアウトが変わったとき、テスト エラーが表示されることがあります。By not implementing accessibility for your control, you might see test failures if the test is played back on different screen configurations, in different environments, or when the UI layout changes.

CUIT_RecordNoSupport

アクセシビリティを実装している場合は、コード化された UI テスト ビルダーがそれを利用し、テストを記録するときにコントロールに関する情報をキャプチャします。If you implement accessibility, the coded UI test builder uses that to capture information about your control when it records a test. その後、テストを実行すると、コントロールがユーザー インターフェイスの別の場所にあっても、生成されたコードがコントロールに対してそれらのイベントを再生します。Then, when you run the test, the generated code will replay those events against your control, even if it's somewhere else in the user interface. テストの作成者は、コントロールの基本的なプロパティを使用してアサートを作成することもできます。Test authors can also create asserts using the basic properties of your control.

CUIT_Record

Windows フォーム コントロールの記録と再生、プロパティの検証、およびナビゲーションをサポートするにはTo support record and playback, property validation, and navigation for a Windows Forms control

次のプロシージャに概要を示し、AccessibleObject で詳しく説明しているように、コントロールのユーザー補助を実装します。Implement accessibility for your control as outlined in the following procedure, and explained in detail in AccessibleObject.

CUIT_Accessible

  1. Control.ControlAccessibleObject から派生するクラスを実装し、クラスのオブジェクトを返すように AccessibilityObject プロパティをオーバーライドします。Implement a class that derives from Control.ControlAccessibleObject, and override the AccessibilityObject property to return an object of your class.

    public partial class ChartControl : UserControl
    {
        // Overridden to return the custom AccessibleObject for the control.
        protected override AccessibleObject CreateAccessibilityInstance()
        {
            return new ChartControlAccessibleObject(this);
        }
    
        // Inner class ChartControlAccessibleObject represents accessible information
        // associated with the ChartControl and is used when recording tests.
        public class ChartControlAccessibleObject : ControlAccessibleObject
        {
            ChartControl myControl;
            public ChartControlAccessibleObject(ChartControl ctrl)
                : base(ctrl)
            {
                myControl = ctrl;
            }
        }
    }
    
  2. アクセス可能なオブジェクトの RoleStateGetChild、および GetChildCount プロパティおよびメソッドをオーバーライドします。Override the accessible object's Role, State, GetChild and GetChildCount properties and methods.

  3. 子コントロールの別のアクセシビリティ オブジェクトを実装し、アクセシビリティオブジェクトを返すように子コントロールの AccessibilityObject プロパティをオーバーライドします。Implement another accessibility object for the child control and override the child control's AccessibilityObject property to return the accessibility object.

  4. 子コントロールのアクセシビリティ オブジェクトの BoundsNameParentRoleStateNavigate、および Select プロパティおよびメソッドをオーバーライドします。Override the Bounds, Name, Parent, Role, State, Navigate, and Select properties and methods for the child control's accessibility object.

注意

このトピックでは、AccessibleObject でアクセシビリティのサンプルから始め、残りのプロシージャでそのサンプルに基づいて構築します。This topic starts with the accessibility sample in AccessibleObject, and then builds on that sample in the remaining procedures. ユーザー補助サンプルの作業バージョンを作成する場合は、コンソール アプリケーションを作成し、Program.cs のコードをサンプル コードで置き換えます。If you want to create a working version of the accessibility sample, create a console application and then replace the code in Program.cs with the sample code. アクセシビリティ、System.Drawing、System.Windows.Forms に参照を追加します。Add references to Accessibility, System.Drawing, and System.Windows.Forms. ビルド警告を除去するために、アクセシビリティの [相互運用機能型の埋め込み]False に変更します。Change the Embed Interop Types for Accessibility to False to eliminate a build warning. アプリケーションの実行時にコンソール ウィンドウが表示されないように、プロジェクトの出力の種類を [コンソール アプリケーション] から [Windows アプリケーション] に変更できます。You can change the project's output type from Console Application to Windows Application so that a console window doesn't appear when you run the application.

プロパティ プロバイダーの実装によってカスタム プロパティの検証をサポートするSupport custom property validation by implementing a property provider

記録と再生およびプロパティの検証の基本的なサポートを実装したら、UITestPropertyProvider プラグインを実装して、コントロールのカスタム プロパティをコード化された UI テストから使用できるようにすることができます。After you implement basic support for record and playback and property validation, you can make your control's custom properties available to coded UI tests by implementing a UITestPropertyProvider plug-in. たとえば、次のプロシージャでは、コード化された UI テストがグラフ コントロールの CurveLegend 子コントロールの State プロパティにアクセスできるようにするプロパティ プロバイダーを作成します。For example, the following procedure creates a property provider that allows coded UI tests to access the State property of the chart control's CurveLegend child controls:

CUIT_CustomProps

カスタム プロパティの検証をサポートするにはTo support custom property validation

CUIT_Props

  1. 曲線の凡例のアクセス可能なオブジェクトの Description プロパティをオーバーライドし、説明文字列の豊富なプロパティ値を渡します。Override the curve legend accessible object's Description property to pass rich property values in the description string. 複数の値はセミコロン (;) で区切ります。Separate multiple values with semicolons (;).

    public class CurveLegendAccessibleObject : AccessibleObject
    {
        // add the state property value to the description
        public override string Description
        {
            get
            {
                // Add ";" and the state value to the end
                // of the curve legend's description
                return "CurveLegend; " + State.ToString();
            }
        }
    }
    
  2. クラス ライブラリ プロジェクトを作成し、コントロールの UI テスト拡張パッケージを作成します。Create a UI test extension package for your control by creating a class library project. アクセシビリティ、Microsoft.VisualStudio.TestTools.UITesting、Microsoft.VisualStudio.TestTools.UITest.Common、Microsoft.VisualStudio.TestTools.Extension に参照を追加します。Add references to Accessibility, Microsoft.VisualStudio.TestTools.UITesting, Microsoft.VisualStudio.TestTools.UITest.Common, and Microsoft.VisualStudio.TestTools.Extension. アクセシビリティの [相互運用機能型の埋め込み]False に変更します。Change the Embed Interop Types for Accessibility to False.

  3. UITestPropertyProvider から派生したプロパティ プロバイダー クラスを追加します。Add a property provider class that's derived from UITestPropertyProvider:

    using System;
    using System.Collections.Generic;
    using Accessibility;
    using Microsoft.VisualStudio.TestTools.UITesting;
    using Microsoft.VisualStudio.TestTools.UITest.Extension;
    using Microsoft.VisualStudio.TestTools.UITesting.WinControls;
    using Microsoft.VisualStudio.TestTools.UITest.Common;
    
    namespace ChartControlExtensionPackage
    {
        public class ChartControlPropertyProvider : UITestPropertyProvider
        {
        }
    }
    
  4. Dictionary<TKey,TValue> でプロパティ名とプロパティ記述子を設定して、プロパティ プロバイダーを実装します。Implement the property provider by placing property names and property descriptors in a Dictionary<TKey,TValue>.

  5. アセンブリがコントロールとその子コントロールにコントロール固有のサポートを提供することを示すように、UITestPropertyProvider.GetControlSupportLevel をオーバーライドします。Override UITestPropertyProvider.GetControlSupportLevel to indicate that your assembly provides control-specific support for your control and its children.

  6. Microsoft.VisualStudio.TestTools.UITesting.UITestPropertyProvider の残りの抽象メソッドをオーバーライドします。Override the remaining abstract methods of Microsoft.VisualStudio.TestTools.UITesting.UITestPropertyProvider

  7. UITestExtensionPackage から派生した拡張パッケージ クラスを追加します。Add an extension package class that's derived from UITestExtensionPackage.

  8. アセンブリの UITestExtensionPackage 属性を定義します。Define the UITestExtensionPackage attribute for the assembly.

  9. 拡張パッケージ クラスで、プロパティ プロバイダーが要求されたときにプロパティ プロバイダー クラスを返すように UITestExtensionPackage.GetService をオーバーライドします。In the extension package class, override UITestExtensionPackage.GetService to return the property provider class when a property provider is requested.

  10. UITestExtensionPackage の残りの抽象メソッドと抽象プロパティをオーバーライドします。Override the remaining abstract methods and properties of UITestExtensionPackage.

  11. バイナリをビルドし、%ProgramFiles%\Common\Microsoft Shared\VSTT\10.0\UITestExtensionPackages にコピーします。Build your binaries and copy them to %ProgramFiles%\Common\Microsoft Shared\VSTT\10.0\UITestExtensionPackages.

注意

この拡張パッケージは、"Text" 型であるすべてのコントロールに適用されます。This extension package is applied to any control that is of type "Text". 同じ種類の複数のコントロールをテストしている場合は、テストを記録するとき、配置する拡張パッケージを管理できるように別々にテストします。If you're testing multiple controls of the same type, test them separately so you can manage which extension packages are deployed when you record the tests.

カスタム プロパティにアクセスするためのクラスを実装してコード生成をサポートするSupport code generation by implementing a class to access custom properties

コード化された UI テスト ビルダーはセッションの記録からコードを生成するとき、UITestControl クラスを使用してコントロールにアクセスします。When the coded UI test builder generates code from a session recording, it uses the UITestControl class to access your controls.

コントロールのカスタム プロパティへのアクセスを提供するためにプロパティ プロバイダーを実装している場合は、これらのプロパティへのアクセスに使用する特殊なクラスを追加できます。If you've implemented a property provider to provide access to your control's custom properties, you can add a specialized class that is used to access those properties. 特殊なクラスを追加することで、生成されるコードか簡略化されます。Adding a specialized class simplifies the generated code.

特殊なクラスを追加してコントロールにアクセスするにはTo add a specialized class to access your control

CUIT_CodeGen

  1. WinControl から派生したクラスを実装し、コンストラクターの検索プロパティのコレクションにコントロールの型を追加します。Implement a class that's derived from WinControl and add the control's type to the search properties collection in the constructor.

  2. クラスのプロパティとして、コントロールのカスタム プロパティを実装します。Implement your control's custom properties as properties of the class.

  3. 曲線の凡例の子コントロールの新しいクラスの型を返すように、プロパティ プロバイダーの UITestPropertyProvider.GetSpecializedClass メソッドをオーバーライドします。Override your property provider's UITestPropertyProvider.GetSpecializedClass method to return the type of the new class for the curve legend child controls.

  4. 新しいクラスの PropertyNames メソッドの型を返すように、プロパティ プロバイダーの GetPropertyNamesClassType メソッドをオーバーライドします。Override your property provider's GetPropertyNamesClassType method to return the type of the new class' PropertyNames method.

操作フィルターの実装によって目的に応じた操作をサポートするSupport intent-aware actions by implementing an action filter

Visual Studio はテストを記録するとき、各マウス イベントとキーボード イベントをキャプチャします。When Visual Studio records a test, it captures each mouse and keyboard event. ただし、一連のマウス イベントとキーボード イベントで操作の目的が失われる場合があります。However, in some cases, the intent of the action can be lost in the series of mouse and keyboard events. たとえば、コントロールがオートコンプリートをサポートしている場合は、テストを別の環境で再生すると、同じマウス イベントとキーボード イベントのセットで別の値になることがあります。For example, if your control supports autocomplete, the same set of mouse and keyboard events may result in a different value when the test is played back in a different environment. 一連のキーボード イベントとマウス イベントを単一の操作に置き換える操作フィルター プラグインを追加できます。You can add an action filter plug-in that replaces the series of keyboard and mouse events with a single action. こうすることで、値を選択する一連のマウス イベントとキーボード イベントを、値を設定する単一の操作に置き換えることができます。This way, you can replace the series of mouse and keyboard events that select a value with a single action that sets the value. これによって、コード化された UI テストは環境の違いによるオートコンプリートの結果の違いから保護されます。Doing that protects coded UI tests from the differences in autocomplete from one environment to another.

目的に応じた操作をサポートするにはTo support intent-aware actions

CUIT_Actions

  1. UITestActionFilter から派生した操作フィルター クラスを実装して、ApplyTimeoutCategoryEnabledFilterTypeGroup、および Name プロパティをオーバーライドします。Implement an action filter class that's derived from UITestActionFilter, overriding the properties ApplyTimeout, Category, Enabled, FilterType, Group and Name.

  2. ProcessRule をオーバーライドします。Override ProcessRule. 次の例では、ダブルクリック操作をシングルクリック操作に置き換えています。The example here replaces a double-click action with a single click action.

  3. 拡張パッケージの GetService メソッドに操作フィルターを追加します。Add the action filter to the GetService method of your extension package.

  4. バイナリをビルドし、%ProgramFiles%\Common Files\Microsoft Shared\VSTT\10.0\UITestExtensionPackages にコピーします。Build your binaries and copy them to %ProgramFiles%\Common Files\Microsoft Shared\VSTT\10.0\UITestExtensionPackages.

注意

操作フィルターは、ユーザー補助の実装またはプロパティ プロバイダーに依存しません。The action filter does not depend on the accessibility implementation or on the property provider.

プロパティ プロバイダーまたは操作フィルターをデバッグするDebug your property provider or action filter

プロパティ プロバイダーとアクション フィルターは拡張パッケージで実装されます。Your property provider and action filter are implemented in an extension package. テスト ビルダーは、アプリケーションとは別のプロセスで拡張パッケージを実行します。The test builder runs the extension package in a separate process from your application.

プロパティ プロバイダーまたは操作フィルターをデバッグするにはTo debug your property provider or action filter

  1. 拡張パッケージのデバッグ バージョンをビルドし、.dll ファイルと .pdb ファイルを %ProgramFiles%\Common Files\Microsoft Shared\VSTT\10.0\UITestExtensionPackages にコピーします。Build the debug version of your extension package copy the .dll and .pdb files to %ProgramFiles%\Common Files\Microsoft Shared\VSTT\10.0\UITestExtensionPackages.

  2. アプリケーションを実行します (デバッガーの外部で)。Run your application (not in the debugger).

  3. コード化された UI テスト ビルダーを実行します。Run the coded UI test builder.

    codedUITestBuilder.exe /standalone

  4. codedUITestBuilder プロセスにデバッガーをアタッチします。Attach the debugger to the codedUITestBuilder process.

  5. コード内にブレークポイントを設定します。Set breakpoints in your code.

  6. コード化された UI テスト ビルダーで、プロパティ プロバイダーを実行するためのアサートを作成し、操作フィルターを実行するための操作を記録します。In the coded UI test builder, create asserts to exercise your property provider, and record actions to exercise your action filters.

関連項目See also