データ ドリブンのコード化された UI テストの作成

さまざまな条件をテストするには、パラメーター値を変えながら複数回テストを実行します。これを行う場合、データ ドリブンのコード化された UI テストが便利な方法です。データ ソースにパラメーター値を定義し、データ ソース内の各行はコード化された UI テストのイテレーションとします。テスト全体の結果は、すべてのイテレーションの結果に基づきます。たとえば、1 つのテスト イテレーションが失敗した場合、テスト全体の結果は失敗となります。

必要条件

  • Visual Studio Ultimate, Visual Studio Premium

データ ドリブンのコード化された UI テストの作成

このサンプルでは、Windows 電卓アプリケーション上で実行されるコード化された UI テストを作成します。2 つの数値を加算し、アサーションを使用して合計が正しいことを検証します。次に、アサーションおよび 2 つの数値のパラメーター値をデータ ドリブンになるようにコーディングし、コンマ区切り値 (.csv) ファイルに保存します。

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

  1. プロジェクトを作成します。

    コード化された UI テスト プロジェクトを作成

  2. アクションを記録することを選択します。

    アクション記録の選択

  3. 電卓アプリを開き、テストの記録を開始します。

    アクションを記録

  4. 1 と 2 を加算し、レコーダーを一時停止し、テスト メソッドを生成します。後で、このユーザー入力の値をデータ ファイルからの値に置換することになります。

    テスト メソッドの生成

    テスト ビルダーを閉じます。メソッドがテストに追加されます。

            [TestMethod]
            public void CodedUITestMethod1()
            {
                // To generate code for this test, select "Generate Code for Coded UI Test" from the shortcut menu and select one of the menu items.
                this.UIMap.AddNumbers();
    
            }
    
  5. AddNumbers() メソッドを使用して、テストが実行されていることを確認します。前に示したテスト メソッドにカーソルを置き、コンテキスト メニューを開き、[テストの実行] を選択します。(キーボード ショートカット: Ctrl + R、T)。

    テストの合格または失敗を示すテスト結果が、[テスト エクスプローラー] ウィンドウに表示されます。[テスト エクスプローラー] ウィンドウを開くには、[テスト] メニューの [Windows] を選択し、[テスト エクスプローラー] を選択します。

  6. 予期される値を検証するテストでのアサーション パラメーター値のためにデータ ソースを使用する場合もあるため、2 つの数値の合計が正しいことを検証するアサーションを追加してみます。前に示したテスト メソッドにカーソルを置き、コンテキスト メニューを開き、[コード化された UI テストのコードの生成][コード化された UI テスト ビルダーの使用] の順に選択します。

    合計を表示する電卓のテキスト コントロールをマップします。

    UI テキスト コントロールのマッピング

  7. 合計の値が正しいことを検証するアサーションを追加します。値が 3 である [DisplayText] プロパティを選択し、[アサーションの追加] を選択します。AreEqual 比較演算子を使用し、比較値が 3 であることを確認します。

    アサーションの構成

  8. アサーションを構成した後、ビルダーからコードを再生成します。これにより、検証用の新しいメソッドが作成されます。

    アサーション メソッドの生成

    ValidateSum メソッドは、AddNumbers メソッドの結果を検証するため、コード ブロックの末尾に移動します。

            public void CodedUITestMethod1()
            {
    
                // To generate code for this test, select "Generate Code for Coded UI Test" from the shortcut menu and select one of the menu items.
                this.UIMap.AddNumbers();
                this.UIMap.ValidateSum();
    
            }
    
  9. ValidateSum() メソッドを使用して、テストが実行されていることを確認します。前に示したテスト メソッドにカーソルを置き、コンテキスト メニューを開き、[テストの実行] を選択します。(キーボード ショートカット: Ctrl + R、T)。

    この時点では、すべてのパラメーター値はそのメソッドに定数として定義されます。次に、テストがデータ ドリブンになるようにデータ セットを作成してみます。

ステップ 2 - データ セットを作成する

  1. dataDrivenSample プロジェクトにテキスト ファイルを追加し、その名前を「data.csv」にします。

    コンマ区切り値ファイルをプロジェクトに追加

  2. この .csv ファイルに次のデータを設定します。

    Num1

    Num2

    Sum

    3

    4

    7

    5

    6

    11

    6

    9

    14

    データを追加した後、ファイルが次のように表示されます。

    .CSV ファイルにデータを設定

  3. 正しいエンコーディングを使用して .csv ファイルを保存することが重要です。[ファイル] メニューで、[保存オプションの詳細設定] を選択し、エンコード方式として [Unicode (UTF-8 シグネチャなし) - コードページ 65001] を選択します。

  4. .csv ファイルは出力ディレクトリにコピーする必要があり、そのようにしないとテストを実行できません。このコピーには、[プロパティ] ウィンドウを使用します。

    .CSV ファイルの配置

    データ セットを作成したので、次にデータをテストにバインドしてみます。

ステップ 3 - データ ソース バインドを追加する

  1. データ ソースをバインドするには、テスト メソッドのすぐ上にある既存の DataSource 属性内に [TestMethod] 属性を追加します。

            [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\data.csv", "data#csv", DataAccessMethod.Sequential), DeploymentItem("data.csv"), TestMethod]
            public void CodedUITestMethod1()
            {
    
                // To generate code for this test, select "Generate Code for Coded UI Test" from the shortcut menu and select one of the menu items.
                this.UIMap.AddNumbers();
                this.UIMap.ValidateSum();
    
            }
    

    データ ソースがこのテスト メソッドで使用できるようになりました。

    ヒントヒント

    XML、SQL Express、Excel など他の種類のデータ ソースを使用するサンプルについては、Q & A のセクションにあるデータ ソース属性のサンプルを参照してください。

  2. テストを実行します。

    テストは、3 つのイテレーションを実行することに注意してください。これは、バインドされたデータ ソースに 3 行のデータが含まれているためです。ただし、テストでは定数パラメーター値が引き続き使用され、毎回 3 の合計に 1 + 2 が加算されます。

    次に、データ ソース ファイル内の値を使用するようにテストを構成します。

ステップ 4 - コード化された UI テストでデータを使用する

  1. CodedUITest.cs ファイルの先頭に using Microsoft.VisualStudio.TestTools.UITesting.WinControls を追加します。

    using System;
    using System.Collections.Generic;
    using System.Text.RegularExpressions;
    using System.Windows.Input;
    using System.Windows.Forms;
    using System.Drawing;
    using Microsoft.VisualStudio.TestTools.UITesting;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using Microsoft.VisualStudio.TestTools.UITest.Extension;
    using Keyboard = Microsoft.VisualStudio.TestTools.UITesting.Keyboard;
    using Microsoft.VisualStudio.TestTools.UITesting.WinControls;
    
  2. データ ソースからの値を適用する TestContext.DataRow[] メソッドに CodedUITestMethod1() を追加します。データ ソースの値は、コントロール SearchProperties を使用して UIMap コントロールに割り当てられている定数をオーバーライドします。

            public void CodedUITestMethod1()
            {
    
                // To generate code for this test, select "Generate Code for Coded UI Test" from the shortcut menu and select one of the menu items.
                this.UIMap.UICalculatorWindow.UIItemWindow.UIItem1Button.SearchProperties[WinButton.PropertyNames.Name] = TestContext.DataRow["Num1"].ToString(); 
                this.UIMap.UICalculatorWindow.UIItemWindow21.UIItem2Button.SearchProperties[WinButton.PropertyNames.Name] = TestContext.DataRow["Num2"].ToString();
                this.UIMap.AddNumbers();
                this.UIMap.ValidateSumExpectedValues.UIItem2TextDisplayText = TestContext.DataRow["Sum"].ToString();
                this.UIMap.ValidateSum();
    
            }
    

    どの検索プロパティにデータをコーディングするかを確認するには、コード化された UI テスト エディターを使用します。

    • UIMap.uitest ファイルを開きます。

      コード化された UI テスト エディターを開く

    • UI アクションを選択し、対応する UI コントロールのマップを確認します。マップがどのようにコードに対応するかに注意します (たとえば、this.UIMap.UICalculatorWindow.UIItemWindow.UIItem1Button)。

      コーディング補助のためのコード化された UI テスト エディターの使用

    • [プロパティ] ウィンドウで、[検索プロパティ] を開きます。検索プロパティ [名前] の値は、データ ソースを使用してコードで操作される対象です。たとえば、SearchProperties には各データ行の最初の列の値 (UIItem1Button.SearchProperties[WinButton.PropertyNames.Name] = TestContext.DataRow["Num1"].ToString();) が割り当てられます。3 つのイテレーションのために、このテストでは検索プロパティの [名前] の値を 3、5、6 の順に変更します。

      コーディング補助のためのプロパティ検索の使用

  3. ソリューションを保存します。

ステップ 5 - データ ドリブン テストを実行する

  • テストを再実行して、テストがデータ ドリブンになったことを確認します。

    テストでは、.csv ファイル内の値を使用して、3 つのイテレーションが実行されます。検証も機能し、テストはテスト エクスプローラーで渡されたとおりに表示されます。

ガイダンス

詳細については、「Visual Studio 2012 を使用した継続的配信のためのテスト – 第 2 章: 単体スト: 内部のテスト」と「Visual Studio 2012 を使用した継続的配信のためのテスト – 第 5 章: システム テストの自動化」を参照してください。

Q & A

SQL Express や XML など他のデータ ソースの種類のデータ ソースの属性とは何ですか。

次の表に示したサンプルのデータ ソース文字列を使用できます。コードにコピーし、必要なカスタマイズを行ってください。

データ ソースの種類

データ ソースの属性

CSV

[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\data.csv", "data#csv", DataAccessMethod.Sequential), DeploymentItem("data.csv"), TestMethod]

Excel

DataSource("System.Data.Odbc", "Dsn=ExcelFiles;Driver={Microsoft Excel Driver (*.xls)};dbq=|DataDirectory|\\Data.xls;defaultdir=.;driverid=790;maxbuffersize=2048;pagetimeout=5;readonly=true", "Sheet1$", DataAccessMethod.Sequential), DeploymentItem("Sheet1.xls"), TestMethod]

Team Foundation Server でのテスト ケース

[DataSource("Microsoft.VisualStudio.TestTools.DataSource.TestCase", "http://vlm13261329:8080/tfs/DefaultCollection;Agile", "30", DataAccessMethod.Sequential), TestMethod]

XML

[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\data.xml", "Iterations", DataAccessMethod.Sequential), DeploymentItem("data.xml"), TestMethod]

SQL Express

[DataSource("System.Data.SqlClient", "Data Source=.\\sqlexpress;Initial Catalog=tempdb;Integrated Security=True", "Data", DataAccessMethod.Sequential), TestMethod]

Q: Windows Phone アプリでデータ ドリブン テストを使用できますか。

A: できます。Windows Phone 用のデータ ドリブンのコード化された UI テストは、テスト メソッドで DataRow 属性を使用して定義します。次の例で、x および y に使用する値は、テストの最初のイテレーションでは 1 と 2、2 番目のイテレーションでは -1 と -2 です。

[DataRow(1, 2, DisplayName = "Add positive numbers")]
[DataRow(-1, -2, DisplayName = "Add negative numbers")]
[TestMethod]
public void DataDrivingDemo_MyTestMethod(int x, int y)

詳細については、「Use Data-driven coded UI tests on Windows Phone apps」を参照してください。

Q: UIMap.Designer ファイルでコードを変更できないのはなぜですか?

A: UIMapDesigner.cs ファイルでコードを変更しても、[UIMap - コード化された UI テスト ビルダー] を使用してコードを生成するたびに変更が上書きされます。このサンプルも含めてほとんどの場合、テストでデータ ソースを使用できるようにするためのコード変更は、テストのソース コード ファイル (CodedUITest1.cs) に対して行うことができます。

記録されたメソッドを変更する必要がある場合は、メソッドを UIMap.cs ファイルにコピーし、メソッド名を変更する必要があります。UIMap.cs ファイルを使用すると、UIMapDesigner.cs ファイルのメソッドやプロパティをオーバーライドできます。Coded UITest.cs ファイルの元のメソッドへの参照を削除し、変更したメソッド名に置き換える必要があります。

参照

関連項目

UIMap

Assert

概念

UI オートメーションを使用したコードの検証

コード化された UI テストのベスト プラクティス

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

その他の技術情報

Creating Coded UI Tests