2

そのため、私は WPF アプリケーションの新機能に取り組んでいます。相互作用がすでに明確に定義されているため、特に BDD を使用したいと思います。私は Web プロジェクトの仕様を書いたことがありますが、デスクトップ アプリケーションの仕様は書いたことがありません。だから、私の問題は、状態をテストし、UI スクレイピングを回避できるようにしたいということですが、これを行う方法がわかりませんか?

問題は次のとおりです。

アプリケーションを起動してログインし、アクションを実行して状態の画面をスクレイピングする必要があることがわかりました (すべて UIAutomation を使用)。

ただし、コードから状態を取得できるようにしたいと考えています。したがって、私が考えることができる最善の方法は、MVVM 構造を介して駆動することです。ただし、私が目にする問題は、あるフォームから次のフォームへのフローの一部が UI バインディングを介して発生することだと思います。そのため、MVVM を介してそれを行う方法はありますか? これをすべて UI で実行する必要がありますか?

これを実装する方法を考えようと、私はぐるぐる回り続けています。上記のベストプラクティスはありますか?

4

2 に答える 2

3

これを行う最善の方法は、テストを階層化することです。これを行う最善の方法は、ビュー レイヤーを無視し、機能的相互作用を説明する BDD 仕様を記述し、ユニット テストを使用してモデル、ビュー モデル、およびコントローラーを追い出すことです。

まず、ビューを無視することで、テストの脆弱性を減らします。ボタンのクリックやメニュー項目の使用に関してテストを記述しなければ、UI が変更されたときにテストを書き直す必要はありません。正直なところ、これを行うことで実際に得られるのは、コマンドが UI 要素に適切にバインドされていることを確認することだけです。

代わりに、このアプローチを検討してください。例としてアラーム プログラムを使用します。

  1. 最初に機能を定義しますWhen it is the correct time Then sound an alarm。これは、ロジックを具体化し、モデル クラスを定義するのに役立ちます。通常、各機能のロジックを構築するために、複数の単体テストを構築します。
  2. UI とのユーザー インタラクションに関係する機能をさらに派生させます。これらを、コンピュータの使用、ボタンのクリック、テキストの入力に慣れていない人に説明するように説明しないでくださいWhen you set the alarm time to 9am。ViewModel コマンドを呼び出し、ViewModel プロパティを設定/取得する SpecFlow バインディングを作成/リファクタリングします。
  3. View Binding を ViewModel に接続します。
  4. UI を変更して、テストがすべて成功するという事実を楽しんでください。

私は最近、各クライアントが複数のサーバーと通信する UI でこの手法を使用しました。メソッドのみが呼び出されるように、すべてを模擬する単体テストがいくつかあります。上に移動すると、両方の部分をインスタンス化してテストで直接結合することにより、クライアントとサーバーの通信が簡素化されるいくつかのテストがあり、最後に、1 つの通信システムの障害をテストするいくつかのテストがあります (サーバーはすべてのクライアントにプッシュします)。マシンでローカルサーバーを実行する必要がある別のクライアント(アクティブサーバーをポーリングする各クライアント)にフォールバックします。バックエンドでこれを行うことができるという事実は、UI で行っていることを反映しており、各段階で関連するものだけをテストしています。

于 2013-03-30T00:19:37.157 に答える
0

コード化された UI で Specflow を使用するのはどうですか? これについては試行を開始しているため、どのように機能するかをお知らせします。現時点では、技術的な観点からそれを追跡しており、機能しているようです. 変更の可能性があることを考えると、UI をテストするためのこの全体的なアプローチには留保がありますが。http://rburnham.wordpress.com/2011/03/15/bdd-ui-automation-with-specflow-and-coded-ui-tests/をご覧ください。

于 2013-04-10T18:16:53.343 に答える