データ ドリブンのコード化された UI テストの作成Creating a Data-Driven Coded UI Test

さまざまな条件をテストするには、パラメーター値を変えながら複数回テストを実行します。To test different conditions, you can run your tests multiple times with different parameter values. これを行う場合、データ ドリブンのコード化された UI テストが便利な方法です。Data-driven coded UI tests are a convenient way to do this. データ ソースにパラメーター値を定義し、データ ソース内の各行はコード化された UI テストのイテレーションとします。You define parameter values in a data source, and each row in the data source is an iteration of the coded UI test. テスト全体の結果は、すべてのイテレーションの結果に基づきます。The overall result of the test will be based on the outcome for all the iterations. たとえば、1 つのテスト イテレーションが失敗した場合、テスト全体の結果は失敗となります。For example, if one test iteration fails, the overall test result is failure.

RequirementsRequirements

  • Visual Studio EnterpriseVisual Studio Enterprise

データ ドリブンのコード化された UI テストの作成Create a data-driven coded UI test

このサンプルでは、Windows 電卓アプリケーション上で実行されるコード化された UI テストを作成します。This sample creates a coded UI test that runs on the Windows Calculator application. 2 つの数値を加算し、アサーションを使用して合計が正しいことを検証します。It adds two numbers together and uses an assertion to validate that the sum is correct. 次に、アサーションおよび 2 つの数値のパラメーター値をデータ ドリブンになるようにコーディングし、コンマ区切り値 (.csv) ファイルに保存します。Next, the assertion and the parameter values for the two numbers are coded to become data-driven and stored in a comma-separated value (.csv) file.

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

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

    コード化された UI テストを作成するCreate a coded UI test project

  2. アクションを記録することを選択します。Choose to record the actions.

    アクション記録を選択するChoose to record the actions

  3. 電卓アプリを開き、テストの記録を開始します。Open the calculator app and start recording the test.

    アクションを記録するRecord actions

  4. 1 と 2 を加算し、レコーダーを一時停止し、テスト メソッドを生成します。Add 1 plus 2, pause the recorder, and generate the test method. 後で、このユーザー入力の値をデータ ファイルからの値に置換することになります。Later we'll replace the values of this user input with values from a data file.

    テスト メソッドを生成するGenetate test method

    テスト ビルダーを閉じます。Close the test builder. メソッドがテストに追加されます。The method is added to the test:

    [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() メソッドを使用して、テストが実行されていることを確認します。Use the AddNumbers() method to verify that the test runs. 前に示したテスト メソッドにカーソルを置き、コンテキスト メニューを開き、[テストの実行] を選択します。Place the cursor in the test method shown above, open the context menu, and choose Run Tests. (キーボード ショートカット: Ctrl + R、T)。(Keyboard shortcut: Ctrl + R, T).

    テストの合格または失敗を示すテスト結果が、[テスト エクスプローラー] ウィンドウに表示されます。The test result that shows if the test passed or failed is displayed in the Test Explorer window. [テスト エクスプローラー] ウィンドウを開くには、[テスト] メニューの [Windows] を選択し、[テスト エクスプローラー] を選択します。To open the Test Explorer window, from the TEST menu, choose Windows and then choose Test Explorer.

  6. 予期される値を検証するテストでのアサーション パラメーター値のためにデータ ソースを使用する場合もあるため、2 つの数値の合計が正しいことを検証するアサーションを追加してみます。Because a data source can also be used for assertion parameter values—which are used by the test to verify expected values—let's add an assertion to validate that the sum of the two numbers is correct. 前に示したテスト メソッドにカーソルを置き、コンテキスト メニューを開き、[コード化された UI テストのコードの生成][コード化された UI テスト ビルダーの使用] の順に選択します。Place the cursor in the test method shown above, open the context menu and choose Generate Code for Coded UI Test, and then Use Coded UI Test Builder.

    合計を表示する電卓のテキスト コントロールをマップします。Map the text control in the calculator that displays the sum.

    UI テキスト コントロールをマップするMap the UI text control

  7. 合計の値が正しいことを検証するアサーションを追加します。Add an assertion that validates that the value of the sum is correct. 値が 3 である [DisplayText] プロパティを選択し、[アサーションの追加] を選択します。Choose the DisplayText property that has the value of 3 and then choose Add Assertion. AreEqual 比較演算子を使用し、比較値が 3 であることを確認します。Use the AreEqual comparator and verify that the comparison value is 3.

    アサーションを構成するConfigure the assertion

  8. アサーションを構成した後、ビルダーからコードを再生成します。After configuring the assertion, generate code from the builder again. これにより、検証用の新しいメソッドが作成されます。This creates a new method for the validation.

    アサーション メソッドを生成するGenerate the assertion method

    ValidateSum メソッドは、AddNumbers メソッドの結果を検証するため、コード ブロックの末尾に移動します。Because the ValidateSum method validates the results of the AddNumbers method, move it to the bottom of the code block.

    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() メソッドを使用して、テストが実行されていることを確認します。Verify that the test runs by using the ValidateSum() method. 前に示したテスト メソッドにカーソルを置き、コンテキスト メニューを開き、[テストの実行] を選択します。Place the cursor in the test method shown above, open the context menu, and choose Run Tests. (キーボード ショートカット: Ctrl + R、T)。(Keyboard shortcut:Ctrl + R, T).

    この時点では、すべてのパラメーター値はそのメソッドに定数として定義されます。At this point, all the parameter values are defined in their methods as constants. 次に、テストがデータ ドリブンになるようにデータ セットを作成してみます。Next, let's create a data set to make our test data-driven.

ステップ 2 - データ セットを作成するStep 2 - Create a data set

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

    コンマ区切り値ファイルをプロジェクトに追加するAdd a comma seperated value file to the project

  2. この .csv ファイルに次のデータを設定します。Populate the .csv file with the following data:

    Num1Num1 Num2Num2 SumSum
    33 44 77
    55 66 1111
    66 98 1414

    データを追加した後、ファイルが次のように表示されます。After adding the data, the file should appear as the following:

    .CSV ファイルにデータを設定するPopulate the .CSV file with data

  3. 正しいエンコーディングを使用して .csv ファイルを保存することが重要です。It is important to save the .csv file using the correct encoding. [ファイル] メニューで、[保存オプションの詳細設定] を選択し、エンコード方式として [Unicode (UTF-8 シグネチャなし) - コードページ 65001] を選択します。On the FILE menu, choose Advanced Save Options and choose Unicode (UTF-8 without signature) - Codepage 65001 as the encoding.

  4. .csv ファイルは出力ディレクトリにコピーする必要があり、そのようにしないとテストを実行できません。The .csv file, must be copied to the output directory, or the test can't run. このコピーには、[プロパティ] ウィンドウを使用します。Use the Properties window to copy it.

    .CSV ファイルを展開するDeploy the .CSV file

    データ セットを作成したので、次にデータをテストにバインドしてみます。Now that we have the data set created, let's bind the data to the test.

ステップ 3 - データ ソース バインドを追加するStep 3 - Add data source binding

  1. データ ソースをバインドするには、テスト メソッドのすぐ上にある既存の DataSource 属性内に [TestMethod] 属性を追加します。To bind the data source, add a DataSource attribute within the existing [TestMethod] attribute that is immediately above the test method.

    [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();  
    
    }  
    

    データ ソースがこのテスト メソッドで使用できるようになりました。The data source is now available for you to use in this test method.

    ヒント

    XML、SQL Express、Excel など他の種類のデータ ソースを使用するサンプルについては、Q & A のセクションにあるデータ ソース属性のサンプルを参照してください。See data source attribute samples in the Q & A section for samples of using other data source types such as XML, SQL Express and Excel.

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

    テストは、3 つのイテレーションを実行することに注意してください。Notice that the test runs through three iterations. これは、バインドされたデータ ソースに 3 行のデータが含まれているためです。This is because the data source that was bound contains three rows of data. ただし、テストでは定数パラメーター値が引き続き使用され、毎回 3 の合計に 1 + 2 が加算されます。However, you will also notice that the test is still using the constant parameter values and is adding 1 + 2 with a sum of 3 each time.

    次に、データ ソース ファイル内の値を使用するようにテストを構成します。Next, we'll configure the test to use the values in the data source file.

ステップ 4 - コード化された UI テストでデータを使用するStep 4 - Use the data in the coded UI test

  1. CodedUITest.cs ファイルの先頭に using Microsoft.VisualStudio.TestTools.UITesting.WinControls を追加します。Add using Microsoft.VisualStudio.TestTools.UITesting.WinControls to the top of the CodedUITest.cs file:

    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() を追加します。Add TestContext.DataRow[] in the CodedUITestMethod1() method which will apply values from the data source. データ ソースの値は、コントロール SearchProperties を使用して UIMap コントロールに割り当てられている定数をオーバーライドします。The data source values override the constants assigned to UIMap controls by using the controls SearchProperties:

    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 テスト エディターを使用します。To figure out which search properties to code the data to, use the Coded UI Test Editor.

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

      コード化された UI テスト エディターを開くOpen the Coded UI Test Editor

    • UI アクションを選択し、対応する UI コントロールのマップを確認します。Choose the UI action and observe the corresponding UI control mapping. マップがどのようにコードに対応するかに注意します (たとえば、this.UIMap.UICalculatorWindow.UIItemWindow.UIItem1Button)。Notice how the mapping corresponds to the code, for example, this.UIMap.UICalculatorWindow.UIItemWindow.UIItem1Button.

      コーディング補助のためのコード化された UI テスト エディターを使用するUse the Coded UI Test Editor to assist with code

    • [プロパティ] ウィンドウで、[検索プロパティ] を開きます。In the Properties Window, open Search Properties. 検索プロパティ [名前] の値は、データ ソースを使用してコードで操作される対象です。The search properties Name value is what is being manipulated in the code using the data source. たとえば、SearchProperties には各データ行の最初の列の値 (UIItem1Button.SearchProperties[WinButton.PropertyNames.Name] = TestContext.DataRow["Num1"].ToString();) が割り当てられます。For example, the SearchProperties is being assigned the values in the first column of each data row: UIItem1Button.SearchProperties[WinButton.PropertyNames.Name] = TestContext.DataRow["Num1"].ToString();. 3 つのイテレーションのために、このテストでは検索プロパティの [名前] の値を 3、5、6 の順に変更します。For the three iterations, this test will change the Name value for the search property to 3, then 5, and finally 6.

      コーディング補助のためのプロパティ検索を使用するUse the search properties to assist in coding

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

ステップ 5 - データ ドリブン テストを実行するStep 5 - Run the data-driven test

  1. テストを再実行して、テストがデータ ドリブンになったことを確認します。Verify that the test is now data-driven by running the test again.

    テストでは、.csv ファイル内の値を使用して、3 つのイテレーションが実行されます。You should see the test run through the three iterations using the values in the .csv file. 検証も機能し、テストはテスト エクスプローラーで渡されたとおりに表示されます。The validation should work as well and the test should display as passed in the Test Explorer.

    ガイダンスGuidance

    詳細については、「Visual Studio 2012 を使用した継続的配信のためのテスト - 第 2 章: 単体テスト: 内部のテスト」および「Visual Studio 2012 を使用した継続的配信のためのテスト - 第 5 章: システム テストの自動化」 を参照してください。For additional information, see Testing for Continuous Delivery with Visual Studio 2012 - Chapter 2: Unit Testing: Testing the Inside and Testing for Continuous Delivery with Visual Studio 2012 - Chapter 5: Automating System Tests

Q & AQ & A

SQL Express や XML など他のデータ ソースの種類のデータ ソースの属性とは何ですか。What are the data source attributes for other data source types, such as SQL Express or XML?

次の表に示したサンプルのデータ ソース文字列を使用できます。コードにコピーし、必要なカスタマイズを行ってください。You can use the sample data source strings in the table below by copying them to your code and making the necessary customizations.

データ ソースの型と属性Data Source Types and Attributes

  • CSVCSV

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

  • ExcelExcel

    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 でのテスト ケースTest case in Team Foundation Server

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

  • XMLXML

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

  • SQL ExpressSQL Express

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

Q: Windows Phone アプリでデータ ドリブン テストを使用できますか。Q: Can I use data-driven tests on my Windows Phone app?

A: できます。A: Yes. Windows Phone 用のデータ ドリブンのコード化された UI テストは、テスト メソッドで DataRow 属性を使用して定義します。Data-driven Coded UI tests for Windows Phone are defined using the DataRow attribute on a test method. 次の例で、x および y に使用する値は、テストの最初のイテレーションでは 1 と 2、2 番目のイテレーションでは -1 と -2 です。In the following example, x and y use the values of 1 and 2 for the first iteration and -1 and -2 for the second iteration of the test.

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

詳細については、「Windows Phone アプリでのデータ ドリブンのコード化された UI テストの使用」を参照してください。For more information, see Use Data-driven coded UI tests on Windows Phone apps.

Q: UIMap.Designer ファイルでコードを変更できないのはなぜですか?Q: Why can't I modify the code in the UIMap.Designer file?

A: UIMapDesigner.cs ファイルでコードを変更しても、[UIMap - コード化された UI テスト ビルダー] を使用してコードを生成するたびに変更が上書きされます。A: Any code changes you make in the UIMapDesigner.cs file will be overwritten every time you generate code using the UIMap - Coded UI Test Builder. このサンプルも含めてほとんどの場合、テストでデータ ソースを使用できるようにするためのコード変更は、テストのソース コード ファイル (CodedUITest1.cs) に対して行うことができます。In this sample, and in most cases, the code changes needed to enable a test to use a data source can be made to the test's source code file (that is, CodedUITest1.cs).

記録されたメソッドを変更する必要がある場合は、メソッドを UIMap.cs ファイルにコピーし、メソッド名を変更する必要があります。If you have to modify a recorded method, you must copy it to UIMap.cs file and rename it. UIMap.cs ファイルを使用すると、UIMapDesigner.cs ファイルのメソッドやプロパティをオーバーライドできます。The UIMap.cs file can be used to override methods and properties in the UIMapDesigner.cs file. Coded UITest.cs ファイルの元のメソッドへの参照を削除し、変更したメソッド名に置き換える必要があります。You must remove the reference to the original method in the Coded UITest.cs file and replace it with the renamed method name.

関連項目See Also

<xref:Microsoft.VisualStudio.TestTools.UITest.Common.UIMap.UIMap><xref:Microsoft.VisualStudio.TestTools.UITest.Common.UIMap.UIMap>
<xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert><xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert>
UI オートメーションを使用してコードをテストする Use UI Automation To Test Your Code
コード化された UI テストを作成する Creating Coded UI Tests
コード化された UI テストのベスト プラクティス Best Practices for Coded UI Tests
コード化された UI テストと操作の記録でサポートされている構成とプラットフォームSupported Configurations and Platforms for Coded UI Tests and Action Recordings