2009-06-27 6 views
28

MicrosoftがASP.NET MVCを使用したのは、ASP.NET用のTest Driven Design(TDD)を簡単にするためでした。しかし、私はASP.NET WebFormsにかなり大きなブラウンフィールド(既存の)アプリケーションを用意していますが、TDDタイプの機能を実装したいと思っています。これを行う方法があると仮定していますが、実行可能なオプションは何ですか?ASP.NET WebFormsでTDDを実装する方法

+1

だけ明確にするために、あなたはテスト駆動を行うwan'tありません開発や単体テスト? – alexn

+0

私はTDDを組み込みたいと思っています。私はより良い単体テストのメリットを得ることができました。 –

答えて

36

マイクロソフトでは、Webフォームがあまりにも重量があり、軽量フレームワークを使用してプログラミングしていると感じている未開発市場から収益を上げることができると考えてASP.NET MVCを導入しました。これには、MVCのパラダイムに慣れている人も含まれます。

また、Webフォームで単体テストを行う方法や単体テストやTDDを使いたい人が含まれています。

Webフォームで行う方法は、他の方法と同様に、UIコード以外のすべてをクラスライブラリの別のクラスに分けることです。これらのクラスを開発するには、TDDを使用します。

次の論争の層は、コードの残りの部分を開発するためにTDDを使用する必要があるかどうかです。マークアップ、クライアントサイドコード、ユーザーのやり取りなどです。私の答えは、このためにTDDを使用するのは面倒なことではないことを確認しました。

をご検討ください。ページは特定の外観を持つ必要があります。 CSSを正しく使用していることを証明するために失敗した単体テストを書くつもりですか?正しいCSSスタイルを使用していることを証明するには?私はそうは思わない。


明確にする:TDDでは、失敗するユニットテストから始めます。次に、テストを成功させる最も簡単な変更を行います。

ウェブページにTDDを使用することを想像してください。何が失敗したテストを作りますか?ページは、ページがページが

  1. "IDを入力し、" ラベル
  2. IDテキストボックス
  3. が含まれていることを正しいタイトル
  4. テストが含まれていることを十分に形成されたHTML
  5. テストであることを

    1. テストデータグリッド
    2. 「移動」ボタン
  6. GET後にデータグリッドが空であることをテスト
  7. "1"をテキストボックスに入力して "Go"をクリックすると、顧客1のデータがグリッドに読み込まれることをテストします。

また、上記のページの外観のテストはありません。ページ上のJavaScriptのクライアント側の動作をテストするものはありません。

私はそれがばかだと思います。代わりに、IDに基づいてデータを取得するDALメソッドをテストします。 ID 1の正しいIDが返されていることを確認してください。次に、ページが正しく表示されるように手動でテストするにはどれくらいの時間がかかりますか?「1」を入力して「Go」をクリックし、グリッドに表示されるデータが顧客1の正しいデータですか?

テスト駆動型開発と自動化ユニットテストは、動作をテストするためのものです。 WebフォームのUIは主に宣言的です。ここには大きな「インピーダンスの不一致」があります。

+0

それでは、明確にするために、私のUIレイヤーをビジネスロジックから分離してください。私は他の何かのために私のgridview databindsを変更する必要がありますと思います。コードの背後に、すべてのコントロールを生成する必要がありますか?それは分離を楽にするでしょうか? –

+0

あなたの答えは非常に啓発されています。ありがとう、ジョン。 –

+0

私はそれが助けてくれることを願っています。私がどこかで拠点を逃した場合は、ここでコメントしたり、別の質問をしてください。私は、TDDが役に立つかもしれないいくつかの複雑なUIインタラクションを想像することができますが、それはまれです。あなたが1つを打つなら、私たちに知らせてください。 –

0

HTTPベースのテストを実行して、高度な機能をテストすることができます。コードビハインドコードをビジネスレイヤーにカプセル化し、ユニットテストを実行することが最善の方法です。

0

あなたは公式unittestのフレームワークを使用することができます。すべての http://msdn.microsoft.com/en-us/library/ms182526.aspx

+5

それは公式かもしれないが、それはやっかいだ。 Webサイトの "プロジェクト"を使い始めると仮定してから、TDD環境では完全に失敗します(これがこの問題です)。 –

3

まず、その本当に難しいのWebフォームをテストします。しかし、MVC/MVPパターンのようなコントローラ/プレゼンターへのロジックを打ち破るなら、少なくともプレゼンターをテストすることができます。

擬似コード

Default.aspxを使用すると、簡単に少なくとも=孤立してプレゼンターをテストすることができるよりも

public void Page_Init(object sender, EventArgs e) { 
_presenter = new DefaultPresenter(IDependencyOne, IDependencyTwo etc) //Init new presenter, either from IoC container of choose or "new-it-up" 
} 

public void Save() { 
_presenter.Save(txtValue.Text) 
} 

+0

分離の両側にどのようなものがあるのか​​を具体的に教えてもらえますか? –

+0

私は通常、ページにUIレンダリングとQueryString/Form/Viewstateからの値の変換を行い、他のサービスやリポジトリと通話するプレゼンターに電話をかけます。 –

+0

これらのパターンは、私が示唆していたことの形式化です。開発パラダイムとしてはうまくいくと思いますが、TDDの点では少しオーバーシュートしていると思います。私の考えでは、TDDのテストの目的は、バグが存在しないことを証明するテストを作成することで一連のバグを見つけられないコードを作成することです。私は一度あなたがUIになると、あなたはどんな場合でもそれらのバグの多くを持っていないだろうと思う。おそらく自動化フレームワークによって強化された手動テストを使用することで、TDDではなく単なる単体テストでさえも、あなたが抱えていたであろうバグを見つけ出すことができます。 –

関連する問題