これまでのところ、私は自分のJava Webアプリケーションをテストする方法またはテストする方法を学習していません。
実行する場合、必要なツールは何ですか?スケーリングが必要ない場合、または大きなトラフィックとマルチトランザクションを処理しない場合は、Webアプリケーションをテストする必要がありますか?
アプリケーションが正しく動作することを確認するために、何をテストし、どのようなアプローチをとるべきですか?
これは難しい問題です。 Webアプリケーションの「メソッド」の多くは、HTTPリクエストを入力として受け取り、データベースを使用し、どこかで何らかのセッション状態を更新するという副作用を伴うHTML出力を生成します。これは、単体テストの最悪のシナリオです。
HTMLは、すべてのページに共通するボイラープレートやレイアウトの足場ではなく、特定のメソッドから具体的に取得するデータを分離する必要があるため、困難です。このボイラープレートは、アプリケーションのロジックとは関係なく、新しい配色やその他の何かに変更される可能性があり、すべてのテストが失敗する可能性があります。ログイン画面以外のものを有意義にテストする前に、大量のデータを設定する必要があることが多いため、データベースは特に困難です。
最善のアプローチは、さまざまな種類のテストを使用して、分割統治することです。
多数の独立したレイヤーを使用してアプリケーションを構築するために段階的アプローチを使用した場合、テストがはるかに簡単になると思います。データベースのスペシャリスト、データベースの上の「バックエンド」サービスレイヤー、ビジネスロジックレイヤー、およびビューレイヤーで何かを行うには、プログラマーの大きなチームが必要になる場合があります。そのシナリオでは、ビジネスロジックとある程度他のレイヤーで従来の単体テスト手法を使用できますが、ビューは常に重要です。
編集:私はこれについて考えてきました。 MVCがWebアプリケーションに適用されていることを覚えている限り、それが何を意味するかについては議論がありました。記録としては、Ruby/Railsが最も適切だと思います。このモデルは実際にはデータモデルを意味します。この解釈は、アプリケーションでのサービス層の作成と最も互換性があるため、気に入っています。私が最近読んだ Steve YeggeのPlatform Rant は、本当に目を見張るものでした。サービスをデータモデルにして、自分のドッグフードを食べます。そうすれば、誰かがあなたの創造物をあなたが想像もしなかったものに変えることができます。ここで取り上げた理由は(コードについて考えるのをやめられないという事実を除いて)、コードに分割があるとテストが簡単になるからです。
ほら、私はレイヤーズ・エブリシング・エブリシング・ベター・キャンプにいるわけではない。私は生計を立てる必要があり、生活のために多くの助けなしに多くの特徴を生み出します。私が言っているのは、プロジェクトが十分に成熟していて、データベースをあまり変更しない場合は、スティーブイェッジの理由から、ORMの悪夢をサービスレイヤーに変えることを検討してください。簡単で効果的です。
ぜひチェックしてみてください HTMLUnit 。説明に従って...
HtmlUnitは一般的な単体テストフレームワークではありません。これは特に、テスト目的でブラウザーをシミュレートする方法であり、JUnitやTestNGなどの別のテストフレームワーク内で使用することを目的としています...
HTMLユニットは、シミュレーションされたブラウザ環境を提供し、目的のテストフレームワークにインターフェースして統合します。
JUnitまたはTestNGチェックアウトを使用したHTMLUnitの例 HTMLUnitの概要 ...
私はそれを強くお勧めします。
独自のJavaベースのWebアプリケーションであるため、何よりもまず nit Testing です。アプリケーションのすべてのメソッドをテストします。例外を適切にキャッチし、必要に応じて try-catch を使用しているかどうかを確認してください。
アルゴリズムが適切に最適化され、効率的であるかどうかを分析します。
単体テストが完了したら、次に ホワイトボックステスト 、 ブラックボックステスト および 統合テスト に進みます。次に、UIをテストします。すべてのGUI要素が一貫しており、適切に機能していることを確認します。