Windows アプリの UI テストを自動化しよう@@IT
少し古い記事だけど、ちょうど UI の自動テストをやりたかったので試してみた。
NUnit も初めてだったのでこの記事もあわせて読んだ。
で、このツールは 「Windowsアプリケーション(Win32)」 でも使えるとのことで試してみた。
やること
Visual Studio 2008 にて MFC アプリケーションを作成し、その UI テストを UI オートメーションと NUnit を使って行う。
今回使ったもの
- .NET Framework 3.0 (Visual Studio 2008 があれば OK かも)
- UI Spy (Windows SDK for Windows Vista に含まれる)
- NUnit NUnit 2.4.5
手順
テストされる側(アプリケーション)の作成
1. Visual Studio 2008 で 「MFC アプリケーション」 プロジェクトを作成し、上記記事と同じ画面を作成する
2. エディットボックスとリストボックスのコントロールクラスを作成する
3. ボタンのイベントハンドラを作成し、下記コードを入れる
void CUITestDlg::OnBnClickedButton1() { // TODO: ここにコントロール通知ハンドラ コードを追加します。 UpdateData( TRUE ); m_list.InsertString( -1, m_strInput ); m_strInput = ""; UpdateData( FALSE ); }
4. 実行する
5. UISpy を起動(スタート|プログラム|Microsoft Windows SDK|Tools|UISpy)し、実行したアプリケーションを探す
6. アプリケーションが見つかったらツリーを展開し、ボタン、エディット、リストの「AutomationId」を探す
テストする側(テストクラス)の作成
1. Visual Studio で 「Visual C# | Windows | クラスライブラリ」を選択しプロジェクトを作成する
2. 上記記事のテストコードをコピペする
3. UIAutomationClient、UIAutomationTypes、nunit.framework を参照として追加する
4. SetUp() および AddTwoItem() を MFC アプリ用に修正(@@@の部分)
[SetUp] public void SetUp() { // テスト対象のアプリケーションを起動 // Process app = Process.Start( @"..\..\..\UIAutomation\bin\Debug\UIAutomation.exe" ); Process app = Process.Start( @"..\..\..\Debug\UITest.exe" ); // @@@ テストするアプリケーションのパス Thread.Sleep( 1000 ); // フォームへの参照を // AutomationElementオブジェクトとして取得 aeForm = AutomationElement.FromHandle( app.MainWindowHandle ); } [Test] public void AddTwoItem() { // 操作対象のコントロールへの参照を // AutomationElementオブジェクトとして取得 //AutomationElement txtInput = FindElement( aeForm, "txtInput" ); //AutomationElement btnAdd = FindElement( aeForm, "btnAdd" ); //AutomationElement lstResults = FindElement( aeForm, "lstResults" ); AutomationElement btnAdd = FindElement( aeForm, "1000" ); // @@@ UISpy で探した AutomationId AutomationElement txtInput = FindElement( aeForm, "1001" ); // @@@ UISpy で探した AutomationId AutomationElement lstResults = FindElement( aeForm, "1002" ); // @@@ UISpy で探した AutomationId // 操作対象のコントロール・パターンを取得 ValuePattern vpTxtInput = (ValuePattern)txtInput.GetCurrentPattern( ValuePattern.Pattern ); InvokePattern ipBtnAdd = (InvokePattern)btnAdd.GetCurrentPattern( InvokePattern.Pattern ); ・ ・ ・ }
5. テストクラスをコンパイル
6. NUnit を起動し、「File|Open Project」から 5 で作った DLL を選択する
7. 「Run」 ボタンを押すと実行される