Windows Forms アプリケーションまたは WPF アプリケーションをテストし、複雑なカスタム コントロールまたは Invoke および InvokeMethods メソッドを使用するだけではテストできないカスタム コントロールをテストする場合は、テスト対象アプリケーション (AUT) の実際のコントロールを操作する静的メソッドを作成し、このコードを AUT に追加できます。
AUT にコードを追加することのメリットは、AUT のコードで、動的呼び出しメソッドによるメソッド呼び出しのリフレクション形式ではなく、通常のメソッド呼び出しを使用してコントロールを操作できるという点です。そのため、コードを作成する時に、コード補完と IntelliSense を使用できます。その後、AUT のコードを単純な呼び出しで呼び出し、該当するコントロールをパラメータとして渡すことができます。
この例では、UltraGrid コントロールの内容を取得する方法を示します。UltraGrid コントロールは、Infragistics が提供する NETAdvantage for Windows Forms ライブラリに含まれています。ライブラリの試用版を http://www.infragistics.com/products/windows-forms/downloads からダウンロードできます。
' 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;
}
}
}' VB code mainWindow.LoadAssembly(GetType(UltraGridUtil).Assembly.Location)
// C# code mainWindow.LoadAssembly(typeof(UltraGridUtil).Assembly.Location);
'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);