2009-04-06 6 views
25

...絶対に何もありませんか?それは、それぞれASP.NET WebフォームASP.NET MVCためにパズルのSystem.Web.Abstractions:それは何のために良いですか?

どの部分を埋めるのですか?

System.Web.Abstractionsを使用するASP.NET *ベースアプリケーションを何らかの形で作成して、両方の種類のASP.NET Webアプリケーションで使用できますか?

この場合、System.Web.AbstractionsのクラスをASP.NET WebFormsにどのようにレトロフィットさせましたか?

名前空間からオブジェクトを新規に作成することはできません。したがって、それを嘲笑に使用することはできません。

更新:私はHttpContextと他のbuild-it ASP.NETオブジェクトのテストで問題が分かっていることについてはっきりしていません。しかし、とにかく良い説明に感謝します。

+6

完全に左のフィールドの外ですが、あなたの質問のタイトルのおかげで、私は今、私の頭の中にエドウィンスターラーによる戦争を持っています。 :( –

答えて

35

あなたがHttpContextBaseの新しいアップインスタンスすることはできませんが(たとえば、Webフォームで使用するために)、あなたは経由でインスタンスを取得することができます。 NETのコアクラス(HttpSessionStateなど)

なぜ、知りたいのですか?

これらのコアASP.NETクラスの多くは、密封されているか静的であるため、それらのコードとの間の依存関係を解除することは不可能です。つまり、これらのコア依存関係を模擬することはできず、ASP.NETコードをテストするのがずっと難しくなります。そのため、HttpResponseを直接コード内で直接操作するのではなく、HttpResponseWrapperで操作します。テスト時に、HttpResponseオブジェクトの動作を制御するためにスタブまたはモックアウトすることができます。

これらのラッパーを作成することを考えたことがある、またはそれらのうちの1つまたは2つを実装したことがあるなら、その名前空間に包まれた作業がたくさんあることを知っています。それ。

17

本当に嘲笑のためです。 - HttpContextは密閉されたクラスであり、(簡単に)嘲笑することはできません。 HttpContextBaseは封印されておらず、仮想メソッドであると信じています。名前空間は、ASPをラップするように設計されているタイプが含まれてい

var ctx = new HttpContextWrapper(HttpContext.Current);