コード化された UI テストを使用した Windows Phone アプリのテスト

コード化された UI テストを使用して、Windows Phone アプリをテストします。

簡単な Windows Phone アプリの作成

  1. Visual C# または Visual Basic テンプレートを使用して、空の Windows Phone アプリ用の新しいプロジェクトを作成します。

    新しい Windows Phone アプリの作成

  2. ソリューション エクスプローラーで、MainPage.xaml を開きます。ツールボックスから、ボタン コントロールとテキスト ボックス コントロールをデザイン サーフェイスにドラッグします。

    MainPage.xaml へのコントロールの追加

  3. [プロパティ] ウィンドウで、このボタン コントロールに名前を付けます。

    ボタン コントロールに名前を付ける

  4. テキスト ボックス コントロールに名前を付けます。

    テキストボックス コントロールに名前を付ける

  5. デザイナー画面でボタン コントロールをダブルクリックし、次のコードを追加します。

    private void button_Click_1(object sender, RoutedEventArgs e)
    {
        this.textBox.Text = this.button.Name;
    }
    
    Public NotInheritable Class MainPage
        Inherits Page
    
        Private Sub button_Click(sender As Object, e As RoutedEventArgs) Handles Button.Click
            Me.textBox.Text = Me.button.Name
        End Sub
    End Class
    
  6. F5 キーを押してエミュレーターで Windows Phone アプリを実行し、アプリが機能することを確認します。

    Windows Phone アプリの実行

  7. エミュレーターを終了します。

Windows Phone アプリの配置

  • コード化された UI テストでアプリのコントロールをマップするには、その前に、アプリを配置する必要があります。

    Windows Phone アプリの配置

    エミュレーターが起動します。これで、テストに対してアプリを使用できるようになりました。

    アプリがエミュレータに配置されました

    コード化された UI テストを作成する間は、エミュレーターを実行中のままにしてください。

Windows Phone アプリのコード化された UI テストの作成

  1. Windows Phone アプリを使用するソリューションに、新しいコード化された UI テスト プロジェクトを追加します。

    Windows Phone 用のコード化された UI テストを新規作成する

  2. 十字線ツールを使用して UI マップを編集することを選択します。

    十字線ツールを使用してコード化された UI テストを生成する。

  3. 十字線ツールを使用してアプリを選択してから、アプリの [AutomationId] プロパティの値をコピーします。この値は後で、テストでアプリを起動するために使用します。

    アプリの AutomationId 値をコピー

  4. エミュレーターでアプリを起動し、十字線ツールを使用してボタン コントロールを選択します。次に、ボタン コントロールを UI コントロール マップに追加します。

    十字線ツールを使用してコントロールをマッピングする

  5. テキスト ボックス コントロールを UI コントロール マップに追加するには、前の手順を繰り返します。

    十字線ツールを使用してテキストボックス コントロールをマッピングする

  6. コードを生成して、UI コントロール マップの変更に対応するコードを作成します。

    ビルダーからコードを生成する

  7. 十字線ツールを使用してテキスト ボックス コントロールを選択し、[Text] プロパティを選択します。

    Text プロパティを選択する

  8. アサーションを追加します。これは、値が正しいことを確認するためにテストで使用されます。

    テストへのアサーションの追加

  9. Assert メソッドのコードを追加および生成します。

    アサーションのコードを生成する

  10. Visual C#

    ソリューション エクスプローラーで、UIMap.Designer.cs ファイルを開いて、Assert メソッドとコントロール用に追加したコードを表示します。

    Visual Basic

    ソリューション エクスプローラーで、CodedUITest1.vb ファイルを開きます。CodedUITestMethod1() テスト メソッドのコードで、アサーション メソッド (自動的に追加された Me.UIMap.AssertMethod1()) への呼び出しを右クリックし、[定義へ移動] を選択します。これにより、コード エディターで UIMap.Designer.vb ファイルが開かれて、Assert メソッドとコントロール用に追加したコードを確認できます。

    Caution メモ注意

    UIMap.designer.cs または UIMap.Designer.vb ファイルを直接変更しないでください。そうすると、ファイルへの変更はテストが生成されるたびにオーバーライドされます。

    Assert メソッド

    public void AssertMethod1()
    {
        #region Variable Declarations
        XamlEdit uITextBoxEdit = this.UIApp1Window.UITextBoxEdit;
        #endregion
    
        // Verify that the 'Text' property of 'textBox' text box equals 'button'
        Assert.AreEqual(this.AssertMethod1ExpectedValues.UITextBoxEditText, uITextBoxEdit.Text);
    }
    
    Public Sub AssertMethod1()
        Dim uITextBoxEdit As XamlEdit = Me.UIApp1Window.UITextBoxEdit
    
        'Verify that the 'Text' property of 'textBox' text box equals 'button'
        Assert.AreEqual(Me.AssertMethod1ExpectedValues.UITextBoxEditText, uITextBoxEdit.Text)
    End Sub
    

    コントロール

    #region Properties
    public virtual AssertMethod1ExpectedValues AssertMethod1ExpectedValues
    {
        get
        {
            if ((this.mAssertMethod1ExpectedValues == null))
            {
                this.mAssertMethod1ExpectedValues = new AssertMethod1ExpectedValues();
            }
            return this.mAssertMethod1ExpectedValues;
        }
    }
    
    public UIApp1Window UIApp1Window
    {
        get
        {
            if ((this.mUIApp1Window == null))
            {
                this.mUIApp1Window = new UIApp1Window();
            }
            return this.mUIApp1Window;
        }
    }
    #endregion
    
    #region Fields
    private AssertMethod1ExpectedValues mAssertMethod1ExpectedValues;
    
    private UIApp1Window mUIApp1Window;
    #endregion
    
    #Region "Properties"
    Public ReadOnly Property UIButtonButton() As XamlButton
        Get
            If (Me.mUIButtonButton Is Nothing) Then
                Me.mUIButtonButton = New XamlButton(Me)
                Me.mUIButtonButton.SearchProperties(XamlButton.PropertyNames.AutomationId) = "button"
            End If
            Return Me.mUIButtonButton
        End Get
    End Property
    
    Public ReadOnly Property UITextBoxEdit() As XamlEdit
        Get
            If (Me.mUITextBoxEdit Is Nothing) Then
                Me.mUITextBoxEdit = New XamlEdit(Me)
                Me.mUITextBoxEdit.SearchProperties(XamlEdit.PropertyNames.AutomationId) = "textBox"
            End If
            Return Me.mUITextBoxEdit
        End Get
    End Property
    #End Region
    
    #Region "Fields"
    Private mUIButtonButton As XamlButton
    
    Private mUITextBoxEdit As XamlEdit
    #End Region
    
  11. ソリューション エクスプローラーで、CodedUITest1.cs ファイルまたは CodedUITest1.vb ファイルを開きます。これで、テストを実行する必要がある操作の CodedUTTestMethod1 メソッドにコードを追加できます。UIMap に追加したコントロールを使用して、次のコードを追加します。

    1. 前にクリップボードにコピーしたオートメーション ID プロパティを使用して、Windows Phone アプリを起動します。

      XamlWindow myAppWindow = XamlWindow.Launch("ed85f6ff-2fd1-4ec5-9eef-696026c3fa7b_cyrqexqw8cc7c!App");
      
      XamlWindow.Launch("ed85f6ff-2fd1-4ec5-9eef-696026c3fa7b_cyrqexqw8cc7c!App");
      
    2. ボタン コントロールをタップするジェスチャを追加します。

      Gesture.Tap(this.UIMap.UIApp1Window.UIButtonButton);
      
      Gesture.Tap(Me.UIMap.UIApp1Window.UIButtonButton)
      
    3. 自動的に生成された Assert メソッドへの呼び出しが、アプリの起動とボタンのタップ ジェスチャの後にあることを確認します。

      this.UIMap.AssertMethod1();
      
      Me.UIMap.AssertMethod1()
      

    コードを追加すると、CodedUITestMethod1 テスト メソッドは次のようになります。

    [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.
    
        // Launch the app.
        XamlWindow myAppWindow = XamlWindow.Launch("ed85f6ff-2fd1-4ec5-9eef-696026c3fa7b_cyrqexqw8cc7c!App");
    
        // Tap the button.
        Gesture.Tap(this.UIMap.UIApp1Window.UIButtonButton);
    
        this.UIMap.AssertMethod1();
    }
    
    <CodedUITest>
    Public Class CodedUITest1
    
        <TestMethod()>
        Public Sub 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.
            '
            ' Launch the app.
            XamlWindow.Launch("ed85f6ff-2fd1-4ec5-9eef-696026c3fa7b_cyrqexqw8cc7c!App")
    
            '// Tap the button.
            Gesture.Tap(Me.UIMap.UIApp1Window.UIButtonButton)
    
            Me.UIMap.AssertMethod1()
        End Sub
    

コード化された UI テストの実行

  • テストをビルドし、テスト エクスプローラーを使用してテストを実行します。

    テスト エクスプローラーのビルド/実行

    Windows Phone アプリが起動し、ボタンをタップする操作が完了し、Assert メソッドを使用してテキスト ボックスの Text プロパティが設定され、検証されます。

    Winodws Phone のテストの実行

    テストの完了後、テストの成功を示す確認メッセージがテスト エクスプローラーに表示されます。

    テスト エクスプローラーの結果

Windows Phone アプリでのデータ ドリブンのコード化された UI テストの使用

異なる条件をテストするために、異なるデータ セットを使用して、コード化された UI テストを複数回実行できます。

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)

Q & A

Q: Windows Phone のコード化された UI テスト プロジェクトを作成するためのテンプレートが見つかりません。

A:Visual Studio 2013 Update 2 以降がインストールされていることを確認してください。

Q: UI コントロールをマップするには、Windows Phone アプリをエミュレーターに配置する必要がありますか?

A: はい、その必要があります。コード化された UI テスト ビルダーでは、エミュレーターが実行中であること、そしてエミュレーターにアプリが配置されていることが要件となります。そうでないと、実行中のエミュレーターが見つからないことを通知するエラー メッセージがスローされます。

Q: テストを実行できるのはエミュレーターだけですか? 物理デバイスを使用することもできますか?

A: どちらのオプションもサポートされています。テストの実行ターゲットを選択するには、エミュレーター タイプを変更するか、デバイスのツールバーでデバイスを選択します。[デバイス] を選択する場合、Phone Blue デバイスがコンピューターのいずれかの USB ポートに接続されている必要があります。

エミュレータのバージョンまたは物理デバイスの選択

Q: [コード化された UI テスト] ダイアログの [コードの生成] に、コード化された UI テストを記録するオプションが表示されないのはなぜですか?

A: 記録するオプションは、Windows Phone アプリではサポートされません。

Q: WinJS、Silverlight、または HTML5 ベースの Windows Phone アプリ用に、コード化された UI テストを作成することはできますか?

A: いいえ、XAML ベースのアプリだけがサポートされます。

Q: Windows 8.1 が実行していないシステムで、Windows Phone アプリのコード化された UI テストを作成できますか?

A: いいえ、できません。コード化された UI テスト プロジェクト (Windows Phone アプリ) のテンプレートは Windows 8.1 でのみ使用できます。

Q: エミュレーターにはないコントロールを選択することはできますか?

A: いいえ、できません。そのようなコントロールは、ビルダーで検出されません。

Q: 物理的な電話デバイスを使用して、コード化された UI テスト ビルダーを使ってコントロールをマップすることはできますか?

A: いいえ、できません。ビルダーが UI 要素をマップできるのは、アプリがエミュレーターに配置されている場合のみです。

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

A: UIMapDesigner.cs ファイルでコードを変更しても、[UIMap - コード化された UI テスト ビルダー] を使用してコードを生成するたびに変更が上書きされます。記録されたメソッドを変更する必要がある場合は、メソッドを UIMap.cs ファイルにコピーし、メソッド名を変更する必要があります。UIMap.cs ファイルを使用すると、UIMapDesigner.cs ファイルのメソッドやプロパティをオーバーライドできます。Coded UITest.cs ファイルの元のメソッドへの参照を削除し、変更したメソッド名に置き換える必要があります。

Q: コマンド ラインから、コード化された UI テストを Windows Phone アプリで実行することはできますか?

A: はい、できます。 runsettings ファイルを使用して、テストを実行するターゲット デバイスを指定できます。次に例を示します。

vstest.console.exe “pathToYourCodedUITestDll” /settings:devicetarget.runsettings

サンプル runsettings ファイル:

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<MSPhoneTest>
<!--to specify test execution on device, use a TargetDevice option as follows-->
<TargetDevice>Device</TargetDevice>
<!--to specify an emulator instead, use a TargetDevice option like below-->
<!--<TargetDevice>Emulator 8.1 WVGA 4 inch 512MB</TargetDevice>-->
</MSPhoneTest>
</RunSettings>

Q: XAMLベースの Windows ストア アプリと Windows Phone アプリでは、コード化された UI テストにどのような違いがありますか?

A: 次のように、いくつかの重要な違いがあります。

機能

Windows ストア アプリ

Windows Phone アプリ

テストの実行ターゲット

ローカルまたはリモート コンピューター。リモート コンピューターを指定できるのは、自動テスト ケースを使用してテストを実行する場合です。「Microsoft テスト マネージャーでのテスト ケースの自動化」を参照してください。

エミュレーターまたはデバイス。このトピックの「Q: テストを実行できるのはエミュレーターだけですか? 物理デバイスを使用することもできますか?」を参照してください。

コマンド ラインからの実行

ターゲットを指定するのに設定ファイルは必要ありません。

ターゲットを指定するには runsettings ファイルが必要です。

シェル コントロールに特化されたクラス

DirectUIControl

UITestControl

XAML アプリの WebView コントロール

Html* に特化されたクラスを使用して HTML 要素を操作する場合はサポートされます。「Microsoft.VisualStudio.TestTools.UITesting.HtmlControls」を参照してください。

サポートされていません。

MTM からの自動テストの実行

サポートされています。

サポートされていません。

データ ドリブン テスト

外部データ ソースの使用およびテスト メソッドでの DataSource 属性の使用については、「データ ドリブン テスト」を参照してください。

データは、テスト メソッドの DataRow 属性を使用して、インラインで指定されます。このトピックの「Windows Phone アプリでのデータ ドリブンのコード化された UI テストの使用」を参照してください。

Windows ストア アプリのコード化された UI テストについては、「コード化された UI テストを使用した Windows ストア アプリのテスト」を参照してください。

外部リソース

Microsoft Visual Studio アプリケーション ライフサイクル管理ブログ: Using Coded UI to test XAML-based Windows Phone apps (コード化された UI テストを使用して XAML ベースの Windows Phone アプリをテストする)

参照

概念

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