63

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

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

4

9 に答える 9

62

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

落とし穴のために; ビューをテストしようとしている場合、おそらくいくつかのスレッドの問題に遭遇するでしょう。たとえば、NUnit を実行している場合、デフォルトのテストランナーは MTA (マルチスレッド アパートメント) で実行されますが、WPF は STA (シングルスレッド アパートメント) として実行する必要があります。Mike Twoは、WPF の単体テストを非常に簡単に開始できますが、スレッドの問題は考慮していません。Josh Smith は、こ​​の投稿でスレッド化の問題についていくつかの考えを述べており、 Chris Hedgate によるこの記事も指摘しています。Chris は、Peter Provost のCrossThreadTestRunnerの修正版を使用して、MTA/STA の問題をもう少し友好的な方法でラップします。

于 2008-09-23T09:41:59.243 に答える
13

2016 更新:無料の TestStack.White フレームワークを使用して WPF UI テストを自動化する

  • Project White は放棄されましたが、その後継の TestStack.Whiteは 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();
    }
    
于 2016-10-26T20:40:08.753 に答える
11

@マットデビッド、

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

于 2008-09-12T05:13:43.937 に答える
10

手動で。私は、自動化されたUI テストの大ファンではありません。WPFのガイダンスについてはよくわかりません(akuのリンクを読む必要があります).. いわばまだ固まっているためです... WPFは「正しい方法は何か」という点から安定していません。これらの進化するフレームワークのいずれかを使用していない限り..私は保守的な努力をします

  • ロジック/プレゼンター/コントローラーを無慈悲にテスト (できれば TDD で自動化) します。私はだらしや無気力を主張しているわけではありません
  • UIスキンを薄く保ち、厄介なテスターに​​探索的テストで(手動)クラックを行わせます-UIに関しては、「地獄のテスター」ほど優れたものはありません. 努力: この種のテストを自動化することによる利益率は膨大であり、すべてを把握できるわけではなく、意味がありません... 上層部の「マネージャーを見てください! 手がない!自己テストUI!」

PS:これ (Mary Poppendieck の Google Talk on Lean) をご覧になることをお勧めします。特に、テストで何を自動化するかについての部分です。

于 2008-09-12T06:03:42.817 に答える
0

uiテストを簡単に自動化するには、TestAutomationFXもお勧めします。TestAutomationFXを使用すると、wpf用のnetAdvantageツールを使用できますが、白とQTPでは機能しません。TestAutomationFXは使いやすいインターフェイスを備えており、Visual Studioと統合され、ユーザーイベントを記録するための優れたレコーダーを備えています。

于 2010-07-15T15:49:33.407 に答える
0

WPF オートメーション用に Ranorex V2.0 をお試しください。RanoreXPath と Ranorex リポジトリを使用すると、テスト自動化コードを識別情報から完全に分離できます。Ranorex は、RanoreXPath オブジェクトに基づくキャプチャ/リプレイ エディターも提供します。

于 2008-12-09T20:49:09.167 に答える
0

間違いなく TestAutomationFX.com を見てください。ホワイトでイベントをキャプチャ/記録しようとすると、多くの時間を投資できます(OK、私はしました)。(私の探求の開始時に、私はそれを参照する他の場所での投稿または2つを無視しました).

もちろん、UI テストではない最適なタイプのテストについては、他の点にも賛成です。

しかし、他のタイプのテスト カバレッジの欠点を回避するために、UI で自動化可能な何かを行う場合、TAFX が最も迅速な方法のようです。

于 2008-12-04T16:02:54.647 に答える