2010-12-02 7 views
5

私のアプリケーションすでに私はユニットテストコントローラの長所/短所が何であるかを知りたいのですが、ドメイン層のためのユニットテストを持っているMVC利点

とコントローラをテストするときに1を書くべきかのテストケース。

おかげ

答えて

5

)がホーム・ページに行くには依存しています。

コントローラで検証、リダイレクト、一時メッセージなどが発生する可能性があります。これらの操作は、モデルと同じようにテストする必要があると主張できます。

一方、「Fat Model, Skinny Controller」の考え方を目指すべきです。私はコントローラができるだけ愚かであることを確認する傾向があります。気になる機能(Selenium、Cucumber etc ...)の周りにいくつかのエンド・ツー・エンド・テストを行い、これらがあなたのコントローラーが正しいことを強制します。いくつかのアイテムをリストする機能を開発していたとします。この機能のエンドツーエンドテストがうまくいけば、コントローラーは問題ありません。これが壊れた場合は、回帰を導入したことがわかります。これと組み合わせて、正確なビューがレンダリングされ、正しい応答(リダイレクション、jsonなど)があることを確認するテストのみがあります。Any more testing on your controllerと間違った場所にロジックがあります。

ASP.NET MVC2スティーブサンダソンによって、彼は上記の推論についていくつかの優れた点を示しています。私は完全にそれをお勧めします。これらの単純なコントローラテストをしていないということは、コードベースを簡単に開いて、簡単に変更してアプリケーションを破ることができるということです。正しいビュー/応答が発生している限り、アプリは機能しています。

正しいパラメータでコントローラ内でサービスが呼び出されるというテストはとても簡単であり、コントローラを間接的にテストするかどうかに関係なく、これを行うこともできます。私はこのアプローチ全体を好む傾向があります。あなたの質問に対する完全な答えはyesです。コントローラーをテストしてください;

0

A「プロ」の思想:

ビューにコントローラから定量化データやパラメータを渡している場合には。

私は限られているかまれに思っていますが、サポートコードテストでカバーされていないコントローラ内の内部ロジックをテストすることがあります。しかし、これらのコードを移動する必要があると主張することもできます。

A「コン」思想:コントローラのためのあなたのテストは、追加のコードカバレッジを追加していないか、テストカバレッジを複製する場合

、それだけでオーバーヘッドなし利益のために開発時間を追加します。

0

ビジネスロジックをコントローラから守るために常に努力する必要がありますが、ビューモデルの構築が複雑で複雑なテストが必要な場合がよくあります。

たとえば、カスタムビューモデルを使用して複雑なlinqクエリによってデータベースに照会された複数の選択メニューを含むビューを表示する場合。そのようなロジックはビジネスロジックではないので、ビジネスレイヤーに入れるのは正しいとは言えません。一方、それはテストする必要があります。

編集:明確にするために、私はあなたのビューに選択クエリを置くことを意味するものではありません。それはMVCパターンを検証するでしょう。つまり、そのようなクエリを実行し、複雑なカスタムビューモデルをビュー表示の結果とともに構築するコントローラです。

+0

ビューには、クエリが何であるかについての知識がない必要があります。結果は「はい」です。ビューはデータベースに結びついてはなりません。 – Finglas

+0

正しいビューまたはviewModelを選択するロジックが特定のケースで非常に複雑になり、テストする価値があるという事実に対する正直なコメントは+1です。 –

+0

@Finglas:誤解があるようです。私の見解では、クエリに関する知識はありません。正確にコントローラがクエリのRESULTでカスタムビューモデルを構築しているのはまさにその理由です。 –

1

コントローラのアクションでテストする価値があるかもしれないいくつかのもの:

  1. ビューモデルに返されるUIロジック(などなど、視認性、ドロップダウンリストの値、)
  2. リダイレクト(たとえば、ユーザーがログインしています代わりに、いくつかの他のページにリダイレクト
  3. 検証/アラート
0

コントローラのテストで見つかった問題の1つは、ASP.NET MVCが真に実行チェーンをエミュレートしなければならない場合があることですあなたのコントローラをテストしてください。

たとえば、OnExecutingメソッドにコードがある場合、単体テスト中にコントローラで実際のアクションメソッドを実行するときに、そのメソッドを起動する方法を見つける必要があります。