2012-04-07 15 views
0

私はしばらくの間、ASP.NET(WebForm)で作業してきましたが、ASP.NET MVCを初めて使用しました。私が読んだ多くの記事から、コントローラがテストするのが難しい理由は、HttpContext(Request、Response ...を含む)がランタイムコンポーネントにアクセスしているためです。コントローラでHttpContextにアクセスするのが悪いようです。ASP.NET MVC:コントローラのHttpContextにアクセスするのは良いですか?

しかし、これらのコンポーネントには、Requestからの入力の読み取り、Responseを介した結果の返送、Sessionを使用していくつかの状態変数を保持する必要があります。

したがって、これらのランタイムコンポーネントは、コントローラでアクセスしないとどこにアクセスするのが最適ですか?

答えて

1

コントローラでモデルメソッドを呼び出すと、要求オブジェクトと応答オブジェクトに同じ値が指定されているか、同じソースに出力されています。 「ページ」はこれらのオブジェクトにとって重要なものです。あなたがオブジェクトを取得するためにSystem.Web.HttpContext.Currentを使用できるように

そしてもう一つ、RequestSessionResponseオブジェクトが直接あなたのモデルで参照することはできません。それらはコントローラから呼び出されたものと同じように機能します。

そしてコントローラは、ビューとモデル、とモデル間のブリッジは、これらのオブジェクトのいずれかの応答または要求値が存在しない場合でも動作するはずですようであることを意味し、私はいつものようにこれらのオブジェクトの値を使用しますモデルをモデル内で参照するのではなく、モデルをモデル化するパラメータ。それはMVCのコンセプトの正しい使い方です。

+0

ありがとうございます!しかし、私はまだそれらのオブジェクトにアクセスする最良の場所はどこに答えを得ていない。 – Zach

+0

答えはその文の中にあると思います。私はあなたのためにそれらを大胆にします。 –

0

実際にコントローラからこれらのオブジェクトにアクセスする必要がある場合は、それらを抽象化して模擬インスタンスを挿入して、テストだけをコントローラに分離することができます。

0

MVCでは、HttpContextは実際にはHttpContextBaseです。これらのクラスを直接使用することは完全にうまくいきます。後でコントローラをテストする必要がある場合は、これらのクラスを簡単にモックできます。

http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx

私はあなたが何をしたいかと間違って何も見えません。

コントローラのHttpContextへのアクセスに問題があるようです。

いいえ、あなたの行動をテストする方法について考える必要があります。テストしないと、おそらく問題はありません。私はあなたがテストをお勧めします。

関連する問題