52

私はしばらくの間Rubyコードのテストを書いてきましたが、フロントエンド開発者として、フロントエンドコード用に書いたコードにこれを取り入れることに明らかに興味があります。私が遊んでいるかなりの数の異なるオプションがあります:

人々はテストに何を使用していますか?そしてそれ以上に、人々は何をテストしますか?JavaScriptだけですか?リンク?フォーム?ハードコードされたコンテンツ?

どんな考えでも大歓迎です。

4

3 に答える 3

83

私は数か月前に同じ質問をしました。多くの開発者と話し、多くの調査を行った結果、これがわかりました。JavaScript の単体テストを行い、UI 統合テストの小さなセットを作成し、記録と再生のテスト ツールを使用しないようにする必要があります。詳しく説明しましょう。

まず、テスト ピラミッドについて考えます。. これは、Mike Cohn によって作成された興味深いアナロジーであり、どの種類のテストを行うべきかを判断するのに役立ちます。ピラミッドの最下部にあるのは単体テストです。これはしっかりしていて、迅速なフィードバックを提供します。これらはテスト戦略の基盤であり、ピラミッドの大部分を占める必要があります。上部には、UI テストがあります。これらは、たとえば Selenium が行うように、UI と直接対話するテストです。これらのテストはバグの発見に役立つ可能性がありますが、費用がかかり、フィードバックが非常に遅くなります。また、使用するツールによっては、テストが非常に脆弱になり、実際の運用コードを記述するよりも、これらのテストの維持に多くの時間を費やすことになります。中間のサービス層には、UI を必要としない統合テストが含まれています。たとえば Rails では、

さて、あなたの質問に戻ります。私のプロジェクトは、大量の JavaScript を使用して Spring Roo (Java) で作成された Web アプリケーションであり、JS の単体テストを十分に作成するだけで、バグの数を大幅に削減できることがわかりました。私のアプリケーションでは、JS で記述された多くのロジックがあり、それがここでテストしているものです。ページが実際にどのように表示されるか、またはアニメーションが正常に再生されるかどうかは気にしません。JS で記述したモジュールが期待されるロジックを実行するかどうか、要素クラスが正しく割り当てられているかどうか、およびエラー条件が適切に処理されているかどうかをテストします。これらのテストでは、Jasmine を使用しています。これは素晴らしいツールです。学習は非常に簡単で、スパイと呼ばれる優れたモッキング機能を備えています。ジャスミン-jQueryjQuery を使用している場合は、さらに優れた機能が追加されます。特に、HTML コードのスニペットであるフィクスチャを指定できるため、DOM を手動でモックする必要はありません。私はこのツールを Maven と統合しており、これらのテストは私の CI 戦略の一部です。

Selenium のような記録/再生ツールに依存している場合は特に、UI テストに注意する必要があります。UI は頻繁に変更されるため、これらのテストは壊れ続け、テストが本当に失敗したのか、単に時代遅れなのかを調べるのに多くの時間を費やすことになります。また、単体テストほどの価値はありません。実行するには統合環境が必要なため、修正コストが高くなる開発が完了してから実行するのが一般的です。

ただし、スモーク/リグレッション テストの場合、UI テストは非常に便利です。これらを自動化する必要がある場合は、いくつかの危険に注意する必要があります。テストを書き、記録しないでください。記録されたテストは、通常、コードに小さな変更を加えるたびに壊れる、自動的に生成された xpath に依存しています。Cucumber はこれらのテストを作成するための優れたフレームワークであり、WebDriver と一緒に使用してブラウザーの対話を自動化できると思います。テストを考えるコード。UI テストでは、複雑な xpath に依存する必要がないように、要素を見つけやすくする必要があります。通常は頻繁に行われない場所に class 要素と id 要素を追加します。小さなコーナーケースごとにテストを作成しないでください。これらのテストは、作成に費用がかかり、実行に時間がかかりすぎます。ほとんどの機能を調査するケースに焦点を当てる必要があります。このレベルであまりにも多くのテストを書くと、以前に単体テストでテストしたのと同じ機能をおそらくテストすることになります (それらを書いたと仮定します)。

現在のプロジェクトでは、Spock と Geb を使用して UI テストを作成しています。これらのツールは素晴らしいと思います。それらは Groovy で書かれており、私の Java プロジェクトにより適しています。

于 2012-11-13T12:55:26.300 に答える
4

そのためのオプションとツールはたくさんあります。しかし、それらの選択は、Web UIを使用しているか、デスクトップアプリであるかによって異なります。

あなたが言及したツールから、それがWebUIであると仮定します。Selenium(別名WebDriver)をお勧めします:http ://seleniumhq.org/docs/

サポートされている言語はさまざまです(Rubyがリストに含まれています)。さまざまなブラウザに対して実行できます。また、多くのチュートリアルやヒントを利用できるため、非常に簡単に使用できます。ああ、もちろん無料です:)

于 2012-07-31T15:36:57.957 に答える