WPF ユーザー インターフェイスをテストするにはどうすればよいですか?
解決
テスト自体に関しては、おそらく、 UIオートメーション フレームワーク。または、より流暢で wpf/winforms/win32/swt に依存しないフレームワークの使用方法が必要な場合は、ダウンロードできます。 白 Codeplex から入手してください (環境内でオープン ソース コードを使用できる場合に限ります)。
注意点としては;ビューをテストしようとすると、おそらくスレッドの問題に遭遇するでしょう。たとえば、NUnit を実行している場合、デフォルトのテストランナーは MTA (マルチスレッド アパートメント) で実行されますが、WPF は STA (シングルスレッド アパートメント) として実行する必要があります。 マイク・ツー には、WPF の単体テストを簡単に始めることができますが、スレッドの問題は考慮されていません。Josh Smith は、スレッドの問題についていくつかの考えを持っています。 この郵便受け, と彼はまた指摘する。 この記事 クリス・ヘドゲート著。Chris は Peter Provost の修正バージョンを使用しています。 クロススレッドテストランナー MTA/STA の問題をもう少しフレンドリーな方法でまとめます。
他のヒント
手動で。 私は自動化があまり好きではありません UIテスト それが目的であれば。WPF のガイダンスについてはよくわかりません (aku のリンクを読む必要があります)。いわばまだ固まっている途中だから…。WPF は「何が正しい方法なのか」という点から安定していません。これらの進化するフレームワークのいずれかを使用している場合を除きます。私なら保守的だろうね努力
- ロジック/プレゼンター/コントローラーを容赦なくテストします (自動化、できれば TDD 化)。 私はだらしなさや無気力さを推奨しているわけではありません.
- UI スキンを薄く保ち、厄介なテスターを数人獲得する 探索的テストで (手動で) クラックしてみます。UI に関しては、「地獄から来たテスター」ほど優れたものはありません。取り組み:この種のテストの自動化による利得率は膨大で、すべてを把握できるわけではなく、意味がありません...上層部をなだめることを除いて、「見てください、マネージャー!」手が無い!自己テスト UI!
追伸:見たいかもしれません これ (Mary Poppendieck の Google Talk on Lean).特にテストで何を自動化するかに関する部分
2016 年の更新: 無料の TestStack.White フレームワークを使用して WPF UI テストを自動化する
- プロジェクト・ホワイトは放棄された, 、しかしその後継者 テストスタック.ホワイト NuGet パッケージ経由で入手できます。
- TestStack.White には次のユーティリティ メソッドがあります。 WPF アプリの起動, 見つける 窓/ユーザーコントロール要素, ボタン/要素をクリックする, 、シミュレーション マウスとキーボード イベント、 待っている, 、など。
WPF アプリを起動し、ボタンをクリックし、結果を確認する例は次のようになります。
using TestStack.White; using TestStack.White.UIItems; using TestStack.White.Factory; [TestMethod] public void TestDoSomething() { //Opens the app var app = Application.Launch("MyApp.exe"); //Finds the main window (this and above line should be in [TestInitialize]) var window = app.GetWindow("My App Window Title", InitializeOption.NoCache); //Finds the button (see other Get...() methods for options) var btnMyButton = window.Get<Button>("btnMyButtonWPFname"); //Simulate clicking btnMyButton.Click(); //Gets the result text box //Note: TextBox/Button is in TestStack.White.UIItems namespace var txtMyTextBox = window.Get<TextBox>("txtMyTextBox"); //Check for the result Assert.IsTrue(txtMyTextBox.Text == "my expected result"); //Close the main window and the app (preferably in [TestCleanup]) app.Close(); }
プリズム(コンポジットWPF) は主に「テスト容易性」を念頭に置いて構築されています。自分の成長に適していると思われる場合は、ぜひ試してみてください。
こちらも、 ドットネットロックスのエピソード Prism について音声でさらに詳しく知りたい場合は、これを聞いてください。
試してみることもできます ギア. 。これにより、単一の WPF UserControl を直接単体テストできます。
Win フォームよりも簡単で、問題なく動作します。
「WPF アプリケーション品質ガイド」を確認してください。WPF インターフェイスのテストについてかなり詳しく説明されています。AutomationPeerクラスも忘れないでください。
ぜひ TestAutomationFX.com をご覧ください。ホワイトのイベントをキャプチャ/記録するために、多くの時間を費やすことができます (OK、私はそうしました)。(私の探求の開始時に、私はそれを参照している他の場所の投稿を 1 つか 2 つ無視しました)。
もちろん、UI テストではない最良のテストについては、他の点も重視します。
しかし、他の種類のテスト カバレッジの欠点を回避するために UI で自動化可能な操作を実行しようとしている場合、TAFX が最も早い方法のように思えます。
WPF オートメーション用の Ranorex V2.0 をお試しください。RanoreXPath と Ranorex リポジトリを使用すると、テスト自動化コードを識別情報から完全に分離できます。Ranorex は、RanoreXPath オブジェクトに基づいたキャプチャ/リプレイ エディターも提供します。
自動テスターを使用するのではなく、次のコマンドを使用して GUI 用の真の単体テストを作成できます。 Icuテスト.
UI テストの単純な自動化にも TestAutomationFX をお勧めします。TestAutomationFX では、wpf 用の netAdvantage ツールも使用できますが、white および QTP では機能しません。TestAutomationFX には使いやすいインターフェイスがあり、ビジュアル スタジオと統合されており、ユーザー イベントを記録するための優れたレコーダーが備わっています。