2012-04-13 5 views
0

私のASP.NET MVC3(新)開発では、MvcContrib TestHelper(およびRhino Mocks)の依存関係を作成したくない場合、重要な価値を提供していません。だから私はこのヘルパーの現在の状態を理解しようとしています。MvcContrib TestHelperを評価する

  • のHttpContext
  • のHttpRequest
  • のHttpResponse
  • のHttpSession
  • フォーム
  • TempDataを
  • のQueryString:

    The documentation

    はTestHelperは、以下のコントローラの依存関係のために偽物を生成することを言いますMVC1とMVC2については
  • ApplicationPath
  • PathInfoを

これはとても便利だった私はなぜ見ることができます。しかし、MVC3ではTestHelperの関連性が低くなっているかもしれない改善されたテスト "seams"が導入され始めました。たとえば、MVC3 RequestResponseコントローラプロパティは、HttpRequestとHttpResponseの分離可能/注入可能バージョンであるように特別に設計されています。

私はまだMVC3のテスト容易化の進歩を模索しているので、上記の他の依存性のどれがMVC3の分離(または注入性)を改善したか知りたいと思います。また、MVC3でTestHelperを使用している場合と使用していない場合の上記の依存関係のための模造品(スタブ/モック)を使用したテストを作成するコードのサンプルを見たいと思っています。

TestHelperを使用する場合と使用しない場合のテストライターの違いが十分に小さい場合、私はTestHelperを避けることをお勧めします。これは私が好きな分離フレームワーク(MOQまたはNSubstitute)を自由に選択できることを意味します。

最終的に、MVC3リリースではHttpRequestとHttpResponseの特定の改良されたテスト容易性の手順を実行したが、他の上に挙げた依存性の問題については驚いた。 TestHelperを使わなくても上記の項目がどのように分離されているかを誰かが分かりやすく伝えられることを願っています。

答えて

1

しかしMVC3は がTestHelperはあまり適切作られていて、改善テスト「縫い目」を導入し始めました。たとえば、MVC3リクエストと 応答コントローラのプロパティは、具体的には、HttpRequestとHttpResponseの分離可能/注入可能バージョン になるように設計されています。

MVCは、あなたがあなたの質問にあなたのユニットtestabailityの点で挙げたものに関して全く新しいものを紹介しませんでした。これらはASP.NET MVC 1と2の抽象概念であり、ASP.NET MVC 3の抽象概念です。これにより、コントローラのアクションとそれらに依存するコードを単体でテストできます。しかし、そうするためには、それらの依存関係を模倣する必要があります。それが嘲笑的なフレームワークが活躍するところです。 Rhino Mocksはフレームワークの1つに過ぎません。 MVCContrib.TestHelperは、単体テスト・コントローラーのアクションには本当に素晴らしく洗練された構文を提供します。個人的に私はいつもそれを使用しています。単体テストをより読みやすくし、すべての種類の配管、モック、インフラストラクチャコードで混乱させないようにします。

チェック例えば、このユニットテスト:https://github.com/darind/samplemvc/blob/master/tests/SampleMvc.Web.Tests/Controllers/UsersControllerTests.cs

ASP.NET MVC 3は、あなたがそれらの部品の簡単なコントローラ以外のため、ユニットテストフレームワークの他の多くの部分に依存性を注入することができますdependency resolverとプロバイダを導入していますかつては困難でした。例えば、アクションフィルタ。

  1. あなたは、テスト対象の被験体が依存することを、いくつかのオブジェクトを表現するためにモックを作成し、あなたのユニットテスト
  2. に制御できること:

    しかし、それは何も変わりません、実際のユニットテストの観点

  3. は、あなたはあなたが結果に主張するあなたは
  4. をテストしている実際のメソッドを呼び出す嘲笑オブジェクト
  5. への期待を定義
+0

私は分離フレームワークを使用することに反対していません。私の主な関心事は、MvcContrib TestHelperが私のフレームワークの選択肢を取り除くことです。例えばMOQを好む場合でも、私はRhino Mocksを使わなければなりません。 –

+0

@BrentArias、はい、Rhino Mockが必要です。あなたがMoqを好むなら、手作業ですべての依存関係をモックしてください。あなたはまだ単体テストを行うことができます。私は、MvcContrib.TestHelperの素晴らしい構文と、それが提供するすべての拡張メソッドが好きです。しかし、もしあなたが好きならMoqでも同じことを達成することができます。少しだけ作業しなければなりません。 Web上には、Moq(HttpContextBase、HttpRequestBase、HttpResponseBase、...)を使用してこれらの一般的な抽象化を模倣する方法を説明する多数の記事があります。 –