0

我有一个 Mvc3 控制器的模拟(使用 Moq)设置,例如。

[TestMethod]
public void Step_One_Post_Should_Redirect_To_Step_Two()
{
    // this test checks that when I submit a type parameter of StepOneModel and
    // the next button was clicked Request["next"] ,  then goto Step Two
}

唯一停止此测试运行的是从控制器调用的 Save 方法,该方法失败,因为在此测试上下文中的 Session 中未正确设置值。真的我想从这个单元测试中省略这个数据库调用。

基本上我如何从控制器操作中欺骗/模拟 Save(model) 调用?

[HttpPost]
public ActionResult Index(IStepViewModel step)
{
    // after model is deserialized
    if (!string.IsNullOrEmpty(Request["next"]))
    {
        Save(model)  <-- the bit blocking me
    }

    return View(model)  <-- the bit I want to assert against
}
4

1 回答 1

1

我建议使用优秀的库MvcContrib-test helpers

它为您提供了开箱即用的模拟会话。

一般概念

新的 MVC.Net 框架的主要优点之一是易于测试。虽然这通常是正确的,但在许多领域测试框架变得困难。TestHelper 通过提供一个控制器工厂来提供帮助,该工厂创建具有正确初始化的内部数据成员的控制器。这些包括:

  • HttpContext
  • HttpRequest
  • HttpResponse
  • HttpSession <-----------
  • 形式
  • 临时数据
  • 请求参数
  • 应用路径
  • 路径信息
于 2012-11-19T21:32:43.350 回答