単体テストと ASP.NET Web アプリケーションは、私のグループではあいまいな点です。多くの場合、優れたテスト プラクティスは見過ごされ、Web アプリケーションはテストなしで数年間稼働することになります。
この問題点の原因は、通常、開発中に UI 自動化を作成する手間に関係しています。
あなたまたはあなたの組織は、TDD のベスト プラクティスを Web アプリケーション開発とどのように統合していますか?
単体テストと ASP.NET Web アプリケーションは、私のグループではあいまいな点です。多くの場合、優れたテスト プラクティスは見過ごされ、Web アプリケーションはテストなしで数年間稼働することになります。
この問題点の原因は、通常、開発中に UI 自動化を作成する手間に関係しています。
あなたまたはあなたの組織は、TDD のベスト プラクティスを Web アプリケーション開発とどのように統合していますか?
レイヤーを適切に分離すれば、単体テストを実行できます。Rob Cooper が暗示したように、プレゼンテーションを管理するためのロジック以外のロジックを WebForm に配置しないでください。他のすべてのロジックと永続化レイヤーは個別のクラスに保持する必要があり、それらを個別にテストできます。
GUI をテストするために、セレンが好きな人もいます。設定が面倒だと不満を言う人もいます。
アプリケーションと少なくとも単体テストを、プレゼンター/コントローラー (お好みで mvc/mvp のいずれか) からデータ レイヤーに階層化します。そうすれば、書かれているほとんどのコードに対して適切なテスト カバレッジが得られます。
UI テストを自動化するためのオプションとして、FitNesse、Watin、Selenium を検討しましたが、まだどのプロジェクトでもこれらを使用できていないため、人間によるテストに固執しています。FitNesse は私が傾倒していたものでしたが、TDD を紹介するだけでなく、これを紹介することもできませんでした (それは私を悪くしますか? そうでないことを願っています!)。
私は通常、UI要素に依存することを含むテストを避けます。私は統合テストを好みます。統合テストでは、データベースレイヤーからビューレイヤーまですべてをテストします(実際のレイアウトはテストしません)。
後でテストを作成するのは難しいため、新しいプロジェクトで実際のコードを1行作成する前に、テストスイートを開始してみてください。
テストするものを慎重に選択してください。すべてのテストを無意識に作成しないでください。退屈な作業になることもあるので、難しくしないでください。作成するテストが多すぎると、時間のかかるメンテナンスの重荷の下でそのタスクを放棄するリスクがあります。
できるだけ多くの機能を1つのテストにバンドルするようにしてください。そうすれば、何かがうまくいかなくても、エラーはとにかく伝播します。たとえば、ダイジェスト生成クラスがある場合は、すべてのヘルパー関数ではなく、実際の出力をテストします。
自分を信用しないでください。あなたはいつも間違いを犯すだろうと仮定してください、そしてあなたはあなたの人生を難しくするのではなく、より簡単にするためにテストを書きます。
あなたがテストを書くことに気分が悪いなら、あなたはおそらくそれを間違っているでしょう;)
一般的な方法は、コードビハインドから分離してテストできるオブジェクトに、可能なすべてのコードを移動することです。このようなコードは通常、MVPまたはMVCのデザインパターンに従います。「RhinoIgloo」で検索すると、おそらくそのSubversionリポジトリへのリンクが見つかります。このコードは、私が見た中でWebフォーム上で最高のMVP実装の1つを示しているため、調査する価値があります。
コードビハインドは、このパターンに従うと、次の2つのことを行います。
プレゼンターの単体テストは簡単なはずです。
更新:Rhino Iglooはここにあります:https ://svn.sourceforge.net/svnroot/rhino-tools/trunk/rhino-igloo/
これは良い質問です。私も購読します:)
私はまだ Web 開発に比較的慣れていないので、ほとんどテストされていない多くのコードを見ています。
私にとっては、UIを可能な限り軽量に保ち(通常は数行のコードのみ)、他のすべてのがらくたをテストします。少なくとも、UI を構成するすべての要素が可能な限り正確であるという自信を持つことができます。
完璧ですか?おそらくそうではないかもしれませんが、少なくともそれはまだ非常に高度に自動化されており、コアコード(ほとんどの「魔法」が発生する場所)はまだかなり適切にカバーされています..
Microsoft の無料の UI オートメーション (.NET Framework 3.0 に含まれる) を Web アプリケーション (ASP.NET) で動作させる試みが行われています。Artiso というドイツの会社は、たまたまそれを実現する方法を説明するブログ エントリを書いています (リンク)。
ただし、彼らのブログ投稿は、UI オートメーション フレームワークと winforms を説明する MSDN Web キャストにもリンクしています。これを見た後、関連するコントロールへの参照を取得するには AutomationId が必要であることに気付きました。ただし、Web アプリケーションでは、コントロールに AutomationId がありません。
これについて Thomas Schissler (Artiso) に尋ねたところ、彼はこれが InternetExplorer の大きな欠点であると説明しました。彼は Microsoft の古い技術 ( MSAA ) に言及し、IE8 がこれをより良く行うことを望んでいました。
しかし、Watin も試してみましたが、かなりうまく機能しているようです。Microsoft Excel ワークシートを介して簡単なテストケースを実装できる Wax も気に入りました。
Ivonnaは、ビューの単体テストを行うことができます。コードの大部分を他の部分に移動することをお勧めします。ただし、コントロールやコントロール イベント ハンドラーへの参照など、一部のコードはそこに属します。