web-dev-qa-db-ja.com

単体テストと自動化テスト

私はC#開発者であり、単体テストやSeleniumブラウザテストの自動化にこれまで取り組んだことがありません。

現在の割り当てについては、テストの自動化を行うプロジェクトを持つ既存のVisual Studioソリューションがあります。このソリューションには単体テストがありません。

たとえば、顧客のデータをキャプチャするフォームがライブサイトにあります。このSelenium VSプロジェクトはビルド時に自動でブラウザーを開き、フォームフィールドにランダムな値を入力し、送信をクリックして、「Thank you screen」、データベースエントリなどの次のステップを確認します(これらのテストケースは開発者によって作成され、 QCによる)。

これは単体テストではありませんが、開発の完了後にQCがテストする方法の詳細です。正しい?

これまでにテストに取り組んだことがない人にとって、1つの利点は、コードがSTG、UATなどの新しい環境にデプロイされるたびに、開発者がURL /接続文字列を変更することによってこのプロジェクトを実行でき、実行されることですすべてのテストケースで、時間を節約し、回帰テストのようなものです。

これは、従来の単体テストの代わりにこの種のテストを使用するための良いアプローチですか?そうでない場合、どのモデルが他のモデルよりも優れているかどうかを示します。

4
Qwerty

いいえ、それは良いアプローチではありません。それは実際にはひどい、一般的なものです。それはテスト用のアンチパターンだと思います。

あなたが説明するようなエンドツーエンドのテストは、努力が大きく、価値が低く、コードを変更するときに壊れるリスクが高くなります。ここでの主な問題は、多くのソフトウェアにコーディングの完了後にテストが記述されており、安定した高速の自動テストを追加できないことが多いことです。そして、多くの場合、エンドツーエンドのテストが唯一の現実的なオプションです。

代わりに、高速で、独立した、分離された、ビジネスに焦点を合わせた「ユニット」テストの大規模なスイートによって評価できるように、ソフトウェアを設計する必要があります。次に、データベースやサービスなど、システムとシステムの境界との相互作用に重点を置く「統合」テストをいくつか行います。また、アプリケーション全体が完全に正しく動作していない(起動していないなど)煙のテストの形式として、エンドツーエンドのテストはほとんどありません。これは標準のテストピラミッドです: https://martinfowler.com/bliki/TestPyramid.html

Test Pyramid from Martin Fowler

もう一度強調させてください。コーディングが完了してテストを追加する場合、これを達成することはできません。コードに対する高速自動テストを記述できるようにコードを設計する必要があります。私が知る最良の方法は、テスト駆動開発です。また、既存のコードベースに優れた自動テストを追加する場合、多くの場合、それを可能にするために大規模なリファクタリングとリエンジニアリングが必要になります。

6
Euphoric

エンドツーエンドテストには次の利点があります。

  • それらは、エンドユーザーに表示されるものに非常に近いものです(多くの場合、エンドユーザーに表示されるものを直接テストします)。彼らは、製品ユーザーの目的に対する適合性を直接テストできます。
  • テストごとに数千行のコードをテストします
  • 製品が展開されている環境をテストします

したがって、ユニットテストでは実行できないいくつかのことを実行し、多くのコードをテストします。単体テストの代わりにはなりません。ただし、製品にテストがまったくない場合、エンドツーエンドのテストは、いくつかのテストカバレッジを導入するための優れた方法です。

以前のポスターとは違います。それらは高努力で低価値です。

3
Martin K