0

以前の質問を見てきましたが、この特定のシナリオに対する答えを見つけることができませんでした: TDD アプローチで ASP.NET MVC 3 を使用しています。私のアクション メソッドでは、ActionResult ではなく、ViewResult の戻り値の型を使用します。これは私のコントローラーをテストするのに問題ありません。ただし、ビュー モデルとコントローラーをテストする必要があります。これは、モデル テストに ViewResultBase (ViewResult が実装されていますが、ActionResult は実装されていません) の Model プロパティを使用することで、非常にうまく実行できます。

ビュー モデルが null の場合、別のアクションにリダイレクトしたいと思います。ActionResult は RedirectToAction メソッドをサポートしています。ただし、ViewResult はそうではありません。View メソッドを試しましたが、ブラウザのアドレス バーで URL が変わりません。また、当然のことながら、従来の ASP.Net Response.Redirect(...) も試してみましたが、私の単体テストでは、Response オブジェクトが入力されていないと不平を言っています。

では、ViewResult の ActionResult RedirectToAction に相当するものを実現するには、どのようなアプローチを使用すればよいでしょうか?

4

2 に答える 2

0

コントローラーから複数の結果タイプを返す必要がある場合は、その戻りタイプをアクション結果に設定し、さまざまな条件が正しい結果タイプを作成することをアサートします。

たとえば、AJAX アクションでは、HttpStatusCodeResults を返して、検証が失敗した場合や例外が発生した場合に応答プロパティをエラーに設定することができます。

その後、アクションが成功したときに、結果を表示するために部分ビューを返したい場合があります。

このアプローチを使用すると、コントローラーでロジックを調整しながら、さまざまな結果が正しいことをアサートできます。

于 2012-12-14T11:02:33.887 に答える
0

私はそれを行う方法を見つけました。次の手順を使用しました。

  1. アクション メソッドの戻り値の型を ActionResult に設定しました

  2. ActionResult を使用するように単体テストを変更しました

  3. ResultView の戻り型を持つ 2 つの追加のアクション メソッドを作成しました。

  4. [1] の if 文のアクション メソッドの分岐ごとに、[3] の適切なアクション メソッドにリダイレクトし、RedirectToAction を使用してリダイレクトしました。

  5. ResultView を使用して [3] で作成したアクション メソッドをテストする 2 つの単体テストを作成し、それぞれの基になるモデルにアクセスできるようにします。

于 2012-12-15T06:10:00.090 に答える