0

我查看了以前的问题,但找不到此特定场景的答案:我正在使用带有 TDD 方法的 ASP.NET MVC 3。在我的操作方法中,我使用 ViewResult 的返回类型,而不是 ActionResult。这很好测试我的控制器。但是,我需要测试我的视图模型以及我的控制器。我可以通过在模型测试中使用 ViewResultBase 上的 Model 属性(实现 ViewResult 但不是 ActionResult)来非常愉快地做到这一点。

如果那里的视图模型为空,那么我想重定向到另一个动作。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 的返回类型创建了两个额外的操作方法。

  4. 对于 [1] 中的操作方法的 if 语句的每个分支,我都重定向到 [3] 中的相应操作方法,我使用 RedirectToAction 进行重定向。

  5. 我创建了两个单元测试,它们使用 ResultView 来测试在 [3] 中创建的操作方法,并允许我访问每个单元的底层模型。

于 2012-12-15T06:10:00.090 回答