質問
GWTコードをテストする最良の方法は何ですか?
ホストモードのGWTTestCaseは遅すぎるため、モックフレームワークはいずれも動作しません。
現在、 http://robvanmaris.jteam.nl/2008/03/09/test-driven-development-for-gwt-ui-code/ およびGWTMockUtilities disarm()およびrestore()を使用してウィジェットをモックする。そして、GWT MVCでViewをテストする方法を理解していません。 GWTコードをテストするより良い方法はありますか?
解決
GWTウィジェットを単独でテストする場合は、多くのオプションはありません。 GWTTestCaseを使用してウィジェットをインスタンス化し、そのAPIを介してテストできます。これは、GoogleがGWTウィジェット自体に対して行うことです: RadioButtonTestのソース
ただし、イベント起動メカニズムはGWTTestCasesでは機能しません。つまり、プログラムでボタンをクリックして、リスナーでonClick()コールバックメソッドが呼び出されることを期待することはできません。また、基礎となるDOMに到達することは不可能ではないにしても困難なので、低レベルのHTMLを出力するコードをテストするための最良のツールではない可能性があります。
すべての正しい手順に従っているようです。 Robの記事は、Model-View-Presenter(MVP)設計パターンを使用してテスト可能なコードを記述する方法の優れた説明を提供します。ビューレイヤーに含めるロジックが多ければ多いほど良いです。それが不可能な場合は、Seleniumなどのツールを使用して、動的UIの動作の集中テストを作成します。
同様の戦略-ウィジェットに最小限のコードを含むMVPに従いました。いくつかのケースでは、Gridクラスをラップするコードを作成したため、GWTTestCaseでコンポーネントをインスタンス化し、Gridに渡し、コンポーネントでいくつかのメソッドを呼び出し、Gridの状態を確認できました。 Test-First GWTに関するBetter Softwareの記事を書きました。私のブログ。
非UI GWTクラス(URLエンコーディングやディクショナリなど)を使用するコードをテストする場合、GWTTestCaseを使用するか、コードが単純すぎて壊れないようになるまで同様のラッピング戦略に従う必要があります。次に、J.B。Rainsbergerが言う「フレームワークをテストしないでください!」
他のヒント
代替として、 gwt-test-utils を試してください。スタンドアロンJVMでGWTクライアントコードを実行し、必要なもの(コンポーネント、RPCサービスなど)をモックする機能を提供します。
私にとってうまくいったこと:
従来のモデル/ビュー/コントローラーを使用します(たとえば、ビューまたはコントローラーにビジネスロジックはありません。コントローラーはビューイベントのみをモデルのメソッド呼び出しに変換します)。
GWTビューウィジェットおよびGWTに依存し、プレーンな古いJVMでインスタンス化できない他のクラスからモデルとコントローラーコードを分離します。その後、古き良きJUnitでテストできます。
エンドツーエンドのテストを記述して、GUIを介してシステムをテストし、モデルとコントローラーがビューに正しく接続されていることを確認します。 GWTTestCaseを使用するよりも、WebDriverを使用してJUnitから制御されたブラウザーを介してアプリをデプロイして起動し、それと対話する方が速いことがわかりました!
JMockを使用して、 http://www.jmock.org/gwtのような非同期呼び出しをテストします。 html 。