テスト対象アプリケーションにコードを追加してカスタム コントロールをテストする

Windows Forms アプリケーションまたは WPF アプリケーションをテストし、複雑なカスタム コントロールまたは Invoke および InvokeMethods メソッドを使用するだけではテストできないカスタム コントロールをテストする場合は、テスト対象アプリケーション (AUT) の実際のコントロールを操作する静的メソッドを作成し、このコードを AUT に追加できます。

AUT にコードを追加することのメリットは、AUT のコードで、動的呼び出しメソッドによるメソッド呼び出しのリフレクション形式ではなく、通常のメソッド呼び出しを使用してコントロールを操作できるという点です。そのため、コードを作成する時に、コード補完と IntelliSense を使用できます。その後、AUT のコードを単純な呼び出しで呼び出し、該当するコントロールをパラメータとして渡すことができます。

AUT にコードを追加するには、次の方法があります。
  • AUT でコードをコンパイルします。実装は簡単ですが、意図しない AUT の変更を行うことになります。
  • テスト スクリプトの LoadAssembly メソッドを使用して、実行時にコードを AUT に挿入します。AUT でコードをコンパイルする場合よりも作業は多くなりますが、挿入されたコードはテスト コードの近くに配置されます。LoadAssembly は、WPFWindow クラスおよびFormsWindow クラスで使用できます。

例:UltraGrid Infragistics コントロールのテスト

この例では、UltraGrid コントロールの内容を取得する方法を示します。UltraGrid コントロールは、Infragistics が提供する NETAdvantage for Windows Forms ライブラリに含まれています。ライブラリの試用版を http://www.infragistics.com/products/windows-forms/downloads からダウンロードできます。

UltraGridUtil クラスを作成するには、以下の操作を実行します。
  1. C# または VB .NET で、新しいクラス ライブラリを作成します。新しいプロジェクト AUTExtensions を呼び出します。
    注: クラス ライブラリは、AUT と同じバージョンの .NET バージョンを使用する必要があります。
  2. 必要な依存関係への参照をプロジェクトに追加します。たとえば、Infragistics バージョン 12.2 の場合、次のアセンブリへの参照が必要です。
    • Infragistics4.Shared.v12.2
    • Infragistics4.Win.UltraWinGrid.v12.2
    • Infragistics4.Win.v12.2
    AUT で使用している Infragistics のバージョンが不明な場合は、Microsoft の Process Explorer ツールを使用して、AUT にロードされているアセンブリを確認できます。
    1. AUTExtensions プロジェクトで、次の内容を持つ新しいクラス UltraGridUtil を作成します:
      ' VB code
      Public Class UltraGridUtil
      
        Public Shared Function GetContents(ultraGrid As Infragistics.Win.UltraWinGrid.UltraGrid) As List(Of List(Of String))
          Dim contents = New List(Of List(Of String))
          For Each row In ultraGrid.Rows
            Dim rowContents = New List(Of String)
            For Each cell In row.Cells
              rowContents.Add(cell.Text)
            Next
            contents.Add(rowContents)
          Next
          Return contents
        End Function
      
      End Class
      // C# code
      using System.Collections.Generic;
      
      namespace AUTExtensions {
      
        public class UltraGridUtil {
      
          public static List<List<string>> GetContents(Infragistics.Win.UltraWinGrid.UltraGrid grid) {
            var result = new List<List<string>>();
            foreach (var row in grid.Rows) {
              var rowContent = new List<string>();
              foreach (var cell in row.Cells) {
                rowContent.Add(cell.Text);
              }
              result.Add(rowContent);
            }
            return result;
          }
      
        }
      
      }
      注: Shared 修飾子によって、GetContents メソッドが静的メソッドになります。
  3. AUTExtensions プロジェクトを構築します。
  4. 再生中に、AUT にアセンブリをロードします。
    • Silk4NET プロジェクトで、既存のテスト スクリプトを開くか、新しいテスト スクリプトを作成します。
    • AUTExtensions プロジェクトを Silk4NET プロジェクトへの参照として追加します。
    • 次のコードをテスト スクリプトに追加します:
      ' VB code
      mainWindow.LoadAssembly(GetType(UltraGridUtil).Assembly.Location)
      // C# code
      mainWindow.LoadAssembly(typeof(UltraGridUtil).Assembly.Location);
  5. 挿入したコードの静的メソッドを呼び出して、UltraGrid の内容を取得します:
    'VB code
    Dim ultraGrid = mainWindow.Control("@automationId='my grid'")
    Dim contents As IList = mainWindow.Invoke("AUTExtensions.UltraGridUtil.GetContents", ultraGrid)
    // C# code
    Dim ultraGrid = mainWindow.Control("@automationId='my grid'");
    Dim contents As IList = mainWindow.Invoke("AUTExtensions.UltraGridUtil.GetContents", ultraGrid);