2009-07-06 3 views
10

アップデート:私が受け取った回答のカップルに基づいてのHttpContextのためのベストプラクティスとテスト可能なコントローラ

が、私はちょうど私がからかっについて移動する方法も承知していることを明らかにしたいですmockingフレームワークを使ったHttpContext。 HttpContextを嘲笑することの賛否両論が、HttpContextの周りのラッパークラスを使用することと比較したとき、私はもっと興味を持っています。


私はASP.Net MVCで検証可能なコントローラを構築する際のHttpContextに対処する方法についての意見を探しています。それを読んだら、HttpContextBaseからビルドし、ユニットテストのために必要なスタブ/モックを生成するための模擬フレームワークを使用するか、または使用する予定のHttpContextの領域に依存しないラッパークラスを構築します。

今私はHttpContextBaseの構築に傾いています。追加のラッパークラスの開発と保守に時間を費やす必要がないため、開発プロセスが高速で、保守が簡単なようです。ラッパークラスは基本的な実装を抽象化し、コントローラのコンテキストを要求とは別にしておくことで、ラッパークラスがどのように有益なのかを見ることができますが、セットアップとメンテナンスに余計なオーバーヘッドが必要な場合はわかりません。

この2つのアプローチの賛否両論はどういう感じですか。ソリューションの1つに他のものよりも役立つ特定のタイプの開発がありますか?

これは一般的な問題のようですが、単体テストでASP.Net MVCを使用しているほとんどのチームは、どのように対処しなければなりませんか?この問題に対処していれば、ソリューションはどのように機能しましたか、そして現在は何を変えていますか?

答えて

6

私はHttpContextBaseに向かっています。主に私はそれがまさにこの理由のために発明されたと思うからです:テスト容易性。そして、そこに許容可能な解決策があるときに、なぜ車輪を再発明するのですか?

あなたがのHttpContextの周りにあなたのラッパークラスに多くの労力を置く場合、あなたはあなたの経験は、この設定とされているどのようにHttpContextBase ...

1

私はRhino.Mocksを使用してテストします。コントローラでHttpContextを設定するには、単にそれを嘲笑しました。だから、テスト(またはSUT)の下で私のシステムのようなものです:私は、コントローラのコンテキストをモック

  Controller controllerBase = sut as Controller; 

は、と私は上記のように(HttpContextBaseクラスのモックを返すために、コントローラコンテキストのコンテキストを設定します)。私は時々だけでなく偽物を使用する他のオブジェクトの場合

controllerContext = AMockOf<ControllerContext>(); 

// Add the test HttpContextBase to the controller context 
HttpContextBase httpContextBase = SetUpTestHttpContext(); 
WhenThe(controllerContext).IsAskedForIts(x =>x.HttpContext).Return(httpContextBase).Repeat.Any(); 

:私のコードは次のように見えます。

+0

に非常によく似たものに終わるだろうか?あなたはそれが維持可能であり、実行可能であることを発見しましたか? –

+0

うん、それは私のためにとてもうまくいった。そのトリックは、テストクラスが継承する基本クラスですべてを隠すことです。そのため、一度やり直して、毎回それを心配する必要はありません。 – Erik

関連する問題