複数の UI マップでの大規模アプリケーションのテスト
このトピックでは、複数の UI マップを使用して大規模なアプリケーションをテストする場合のコード化された UI テストの使用方法について説明します。
要件
- Visual Studio Ultimate, Visual Studio Premium
新しいコード化された UI テストを作成すると、Visual Studio テスト フレームワークによってテスト用のコードが既定では UIMap クラスに生成されます。コード化された UI テストの記録方法の詳細については、「コード化された UI テストの作成」および「コード化された UI テストの構造」を参照してください。
UI マップ用に生成されるコードには、テストとやり取りする各オブジェクトのクラスが含まれています。生成されるメソッドごとに、そのメソッド専用のメソッド パラメーター用コンパニオン クラスが生成されます。アプリケーションに多数のオブジェクト、ページ、およびフォームとコントロールがある場合、UI マップは非常に大きくなることがあります。また、数人でテストの作業を行う場合、UI マップが 1 つの大きなファイルであると、アプリケーションが扱いにくくなります。
複数の UI マップ ファイルを使用することには、次のような利点があります。
各マップをアプリケーションの論理的なサブセットに関連付けることができます。このため、変更を管理しやすくなります。
各テスト担当者がアプリケーションのセクションに対して作業を行い、他のセクションのテスト担当者に影響を与えずに、自分のコードをチェックインできます。
アプリケーション UI への追加による拡大を段階的に処理でき、UI の他の部分のテストに対する影響が最小限に抑えられます。
複数の UI マップが必要になる例
次のような状況では、複数の UI マップを作成します。
Web サイトの登録ページや買い物カゴの購入ページのように、いくつかの複雑な複合 UI コントロールのセットが協調して論理的な操作を行う。
いくつかの操作のページを持つウィザードのように、独立したコントロールのセットがアプリケーションのさまざまな場所からアクセスされる。ウィザードの各ページが特に複雑な場合、ページごとに個別の UI マップを作成できます。
複数の UI マップの追加
コード化された UI テストに UI マップを追加するには、
[ソリューション エクスプローラー] では、すべての UI マップを格納するコード化された UI テスト プロジェクトのフォルダーを作成するコード化された UI テストのプロジェクト ファイルを右クリックし、[追加] をポイントし、[新しいフォルダー] を選択します。たとえば、UIMaps という名前を付けます。
新しいフォルダーは、コード化された UI テスト プロジェクトの下に表示されます。
UIMaps フォルダーを右クリックし、[追加] をポイントし、[新しいアイテム] を選択します。
[新しい項目の追加] ダイアログ ボックスが表示されます。
[!メモ]
新しいコード化された UI テスト マップを追加するコード化された UI テスト プロジェクトに存在する必要があります。
一覧から [コード化された UI テスト マップ] を選択します。
[名前] ボックスに、新しい UI マップの名前を入力します。たとえば HomePageMap のように、マップが表すコンポーネントまたはページの名前を使用します。
[追加] をクリックします。
Visual Studio のウィンドウが最小化され、[コード化された UI テスト ビルダー] ダイアログ ボックスが表示されます。
最初のメソッドの操作を記録し、[コードの生成] を選択します。
最初のコンポーネントまたはページのすべての操作とアサーションを記録し、それらをメソッドにグループ化してから、[コード化された UI テスト ビルダー] ダイアログ ボックスを閉じます。
UI マップの作成を続けます。操作とアサーションを記録し、コンポーネントごとのメソッドにグループ化してから、コードを生成します。
多くの場合、アプリケーションのトップ レベルのウィンドウは、すべてのウィザード、フォーム、およびページを通じて一定です。各 UI マップにはトップ レベルのウィンドウのクラスがありますが、すべてのマップは通常、アプリケーションのすべてのコンポーネントが実行されている、同じトップ レベルのウィンドウを参照しています。コード化された UI テストは、コントロール階層を上から順に検索します。トップ レベルのウィンドウから開始するため、複雑なアプリケーションでは、実際のトップ レベルのウィンドウがすべての UI マップで重複する場合があります。実際のトップ レベルのウィンドウが重複している場合、そのウィンドウが変更されると、複数の変更が発生することになります。それによって、UI マップ間で切り替えを行うときに、パフォーマンスの問題が発生する場合があります。
この影響を最小限に抑えるには、CopyFrom() メソッドを使用して、UI マップの新しいトップ レベルのウィンドウがメインのトップ レベルのウィンドウと同じになるようにします。
例
次の例は、さまざまな UI マップで生成されるクラスによって表される各コンポーネントとその子コントロールにアクセスできるようにするユーティリティ クラスの一部です。
この例では、Contoso という名前の Web アプリケーションに、ホーム ページ、製品ページ、および買い物カゴ ページがあります。これらの各ページが、ブラウザー ウィンドウである共通のトップ レベル ウィンドウを共有しています。ページごとに UI マップがあり、ユーティリティ クラスには次のようなコードがあります。
using ContosoProject.UIMaps;
using ContosoProject.UIMaps.HomePageClasses;
using ContosoProject.UIMaps.ProductPageClasses;
using ContosoProject.UIMaps.ShoppingCartClasses;
namespace ContosoProject
{
public class TestRunUtility
{
// Private fields for the properties
private HomePage homePage = null;
private ProductPage productPage = null;
private ShoppingCart shoppingCart = null;
public TestRunUtility()
{
homePage = new HomePage();
}
// Properties that get each UI Map
public HomePage HomePage
{
get { return homePage; }
set { homePage = value; }
}
// Gets the ProductPage from the ProductPageMap.
public ProductPage ProductPageObject
{
get
{
if (productPage == null)
{
// Instantiate a new page from the UI Map classes
productPage = new ProductPage();
// Since the Product Page and Home Page both use
// the same browser page as the top level window,
// get the top level window properties from the
// Home Page.
productPage.UIContosoFinalizeWindow.CopyFrom(
HomePage.UIContosoWindowsIWindow);
}
return productPage;
}
}
// Continue to create properties for each page, getting the
// page object from the corresponding UI Map and copying the
// top level window properties from the Home Page.
}
参照
関連項目
概念
コード化されたユーザー インターフェイス テストを使用したコードの検証