WPF ユーザー インターフェイスをテストするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/58340

  •  09-06-2019
  •  | 
  •  

質問

Win フォームを使用する MVC/MVP アーキテクチャでは、通常はクラスを使用してビューをラップし、モデルとコントローラー/プレゼンターのモックを使用しながら UI をテストします。ラッパー クラスは、UI 内のほとんどすべてを、プロパティとイベントを通じてテスト ランナーが監視できるプロパティにします。

これは WPF アプリをテストするための実行可能なアプローチでしょうか?もっと良い方法はありますか?注意すべき注意点はありますか?

役に立ちましたか?

解決

テスト自体に関しては、おそらく、 UIオートメーション フレームワーク。または、より流暢で wpf/winforms/win32/swt に依存しないフレームワークの使用方法が必要な場合は、ダウンロードできます。 Codeplex から入手してください (環境内でオープン ソース コードを使用できる場合に限ります)。

注意点としては;ビューをテストしようとすると、おそらくスレッドの問題に遭遇するでしょう。たとえば、NUnit を実行している場合、デフォルトのテストランナーは MTA (マルチスレッド アパートメント) で実行されますが、WPF は STA (シングルスレッド アパートメント) として実行する必要があります。 マイク・ツー には、WPF の単体テストを簡単に始めることができますが、スレッドの問題は考慮されていません。Josh Smith は、スレッドの問題についていくつかの考えを持っています。 この郵便受け, と彼はまた指摘する。 この記事 クリス・ヘドゲート著。Chris は Peter Provost の修正バージョンを使用しています。 クロススレッドテストランナー MTA/STA の問題をもう少しフレンドリーな方法でまとめます。

他のヒント

@マット・デイビッド

ドキュメントを読み、Microsoft のコード サンプルを参照してください。 複合WPF (別名プリズム)。これは、テスト駆動の方法で MVP/MVC アーキテクチャを扱う方法を教えるために特別に作成されたプロジェクトです。彼らのサンプル アプリケーションには、プレゼンター/コントローラーの単体テストと、UI の非常に優れた受け入れテストが含まれています (彼らは、 白いフレームワーク ユーザーのアクションをシミュレートするため)

手動で。 私は自動化があまり好きではありません 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 について音声でさらに詳しく知りたい場合は、これを聞いてください。

基本については、channel9 でいくつかの短いビデオをチェックすることもできます。 ここ そして ここ.

試してみることもできます ギア. 。これにより、単一の 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 には使いやすいインターフェイスがあり、ビジュアル スタジオと統合されており、ユーザー イベントを記録するための優れたレコーダーが備わっています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top