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

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. 新しいテスト スクリプトを作成します。新しいスクリプト AUTExtensions を呼び出します。
    注: AUT は、.NET バージョン 4 以降を使用する必要があります。.NET スクリプトをコンパイルすると .NET 4.0 アセンブリが作成されますが、このアセンブリは使用している .NET バージョンが同じかより新しい AUT でのみロードできます。AUT でバージョン 4.0 以前の .NET を使用している場合は、Visual Studio を使用して、UltraGridUtil クラスを含むクラス ライブラリ プロジェクトを作成してください。
  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 スクリプトの内容を次のコードに置き換えます。
      ' 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
      注: Shared 修飾子によって、GetContents メソッドが静的メソッドになります。
  3. 再生中に、AUT にアセンブリをロードします。
    • 既存のテスト スクリプトを開くか、新しいテスト スクリプトを作成します。
    • AUTExtensions スクリプトへの参照を追加します。
    • 次のコードをテスト スクリプトに追加します:
      ' VB code
      mainWindow.LoadAssembly(GetType(UltraGridUtil).Assembly.Location)
      注: Silk Test Workbench によって、各スクリプトが個別の .NET アセンブリにコンパイルされます。
  4. 挿入したコードの静的メソッドを呼び出して、UltraGrid の内容を取得します:
    'VB code
    Dim ultraGrid = mainWindow.Control("@automationId='my grid'")
    Dim contents As IList = mainWindow.Invoke("UltraGridUtil.GetContents", ultraGrid)