12

ここでは、Visual Studio 2008 でプロジェクトに取り組んでいます。これに付属している組み込みのテスト スイート (Microsoft.VisualStudio.TestTools.UnitTesting 名前空間) を使用しています。非常に残念なことに、非常に多くの複雑さ (したがってエラー) が UI レイヤーにコード化されていることがわかりました。単体テストはビジネス レイヤーを適切にカバーしますが、UI レイヤーは常に苛立たしいものです。理想的には、それも単体テストしたいと考えています。ビジュアルスタジオでそれを行うための優れた「Microsoft互換」の方法を知っている人はいますか? nUnitFormsのような単体テスト フレームワークを Microsoft のものと「混合」すると、ある種の競合が発生しますか? 単体テスト フォームで注意すべき明らかなクマのわなはありますか?

4

8 に答える 8

5

UI の単体テストが不要になるように、UI をリファクタリングする必要があります。UI には最小限のビジネス ロジックを含めるか、まったく含めないでください。この問題に対処する多くのパターンがあります。Martin Fowler には、これらのパターンについて多くのことを説明した非常に優れた記事があります: http://martinfowler.com/eaaDev/uiArchs.html

Martin Fowler による Refactoring book には、テスト不可能な UI のリファクタリングについて説明している小さな章があります。また、レガシー コードを効果的に使用することも読むことができます。

注: UI テストを自動化するために使用できるツールがあります。SilkTest が頭に浮かびます。しかし、可能であればそれらを使用しません。

于 2008-12-30T22:15:35.157 に答える
3

これは、通常のアプリケーションの単体テストには問題ありませんが、コントロールの動作と状態の単体テストが必要なユーザー コントロールを構築する場合は、単体テスト フレームワークも必要です。NUnitForms が答えかもしれません。個人的には、自分で調べる必要があります。

于 2010-03-24T23:22:34.673 に答える
2

ここで詳しく説明されているように、パッシブ ビュー アーキテクチャを使用しますhttp://martinfowler.com/eaaDev/PassiveScreen.html

基本的に、フォーム内のすべてのコードを xxxUI と呼ばれる別のクラスに移動します。次に、フォームは IxxxUI インターフェイスを実装し、xxxUI クラスが必要とするすべてのものを公開します。おそらく物事を単純化し、複数のコントロールを扱うことを 1 つのメソッドに集約することができます。

フローは次のようになります。ユーザーがボタンをクリックします。ボタンは、対応する UI クラスのメソッドを呼び出します。必要なパラメーターを渡します。UI Class メソッドはモデルを変更します。次に、インターフェイスを使用して UI を更新します。

単体テストでは、テスト クラスまたはダミー クラスにインターフェイスを実装させ、それ自体を UI クラスに登録します。これらのテスト クラスで任意のタイプの入力を起動し、それに応じて応答させることができます。通常、正確な順序で処理を行うシーケンス リストがあります。(A をタップし、これをクリックし、それをスクロールしてから、B を入力するなど)。

于 2008-12-30T23:16:47.513 に答える
1

ApprovalTests (www.approvaltests.com または nuget 承認テスト) を使用して Winforms をテストするのは非常に簡単で、Nunit だけでなく MsTest とも互換性があります。

その方法のビデオがここにあります: https://www.youtube.com/watch?v=hKeKBjoSfJ8

しかし、プロセスは簡単です。1) 検証したい状態でテストしたいフォームを作成します。2) WinFormApprovals.Verify(フォーム) を呼び出す

ApprovalTests は、ゴールデン マスター パラダイムを使用して結果をスクリーン キャプチャします。必要に応じて、ファイルの名前を .approved に変更するだけでテストに合格します。

既存のコードをリファクタリングする上でこれが優れている点は、結果がどうなるかを心配する必要さえないことです。

于 2012-04-24T07:42:34.157 に答える
0

リファクタリングのインスピレーションについては、 Jeremy D. Miller の WIPプレゼンテーション パターン wiki ページをチェックしてください:)

ミラーは本を書いていますが、この種の必需品になりそうです。

于 2009-10-25T18:13:08.007 に答える
0

独自の UI コントロールをテストして良い結果が得られるようになると、NUnitForms を使用しました。標準の(または十分にテストされた)UIコントロールを使用している場合、リファクタリングについて他の人に同意します。

実際のコントロールのテストに重点を置く場合は、新しいコントロールをサポートするように拡張できる NUnitForms を使用します。とにかく、手動テストを行わない場合は、表示された最終結果の「画像ベース」分析を実行できるライブラリが必要になります。

私はこれのために TestComplete を試しましたが、C# で画像比較のためだけに同様の lib をコーディングできるので、少し高価すぎると思いました。したがって、私の計画は、コントロールを個別にテストしてから、他の人が述べたように UI をリファクタリングすることです。

于 2010-10-19T07:15:11.157 に答える
0

UI レイヤーをテストするには、Microsoft コード化された UI を使用する必要があります。これには、ユーザーが実行するアクションを模倣するテストの作成 (または記録) と、正しい出力が得られることを確認する assert ステートメントの作成が含まれます。

もちろん、単一の作業単位をテストするアクションをフロントエンドから作成することは困難であり、他の単体テストの代わりにはならないため、これは単体テストではなく議論の余地があります。また、フロントエンドのビジネス ロジックをできるだけ薄くする必要があることにも同意します。ただし、これにより、単体テストでカバーできないギャップが埋められます。コード化された UI テストが残りのテストされていないユニットをキャッチできるように、小さな作業ユニットのみがユニット テストでカバーされないことを願っています。

コード化された UI は、Visual Studio Premium の最新バージョンに組み込まれています。レコード機能を使用するだけでなく、テストを自分で作成する方法を学ぶことをお勧めします。これにより、柔軟性が向上します。

于 2014-06-19T09:12:11.010 に答える