【问题标题】:MVCContrib TestHelper and User.Identity.Name, Server.MapPath and Form CollectionMVCContrib TestHelper 和 User.Identity.Name、Server.MapPath 和表单集合
【发布时间】:2012-06-17 22:05:57
【问题描述】:

我是 MVCContrib Testhelper 和 Rhino 的新手。

我需要对依赖于 User.Identity.Name、Server.MapPath 和表单集合的控制器进行单元测试的帮助。

我从

开始
var controller = new SubmitController();
var builder = new TestControllerBuilder();
builder.InitializeController(controller);

我找到this post 用于设置 User.Identity.Name

controller.ControllerContext = TestHelper.MockControllerContext(controller).WithAuthenticatedUser("domain\\username");

此时,在我的控制器中,我现在能够访问 User.Identity。然后问题变成了我如何设置表单集合变量。设置

builder.Form.Add("testvar","1");

不再有效。看来现在我必须通过

访问
controller.HttpContext.Request.Form.Add("testvar","1)

这似乎可行,但此时,我不再使用上面的 builder(TestControllerBuilder)。

然后我不得不模拟引发更多问题的服务器。我怎样才能继续使用构建器,但对 httpContext、HttpRequest、Server 等使用模拟或存根。我有点期待构建器有方法来设置 HttpRequest、Server 等的预期值。

谢谢

【问题讨论】:

    标签: unit-testing rhino-mocks mvccontrib mvccontrib-testhelper


    【解决方案1】:

    当您替换控制器的 ControllerContext 时,删除了 MVCContrib 上下文。试试这样的:

    using MvcContrib.TestHelper;
    using MvcContrib.TestHelper.Fakes;
    using Rhino.Mocks;
    
    ...
    var builder = new TestControllerBuilder();
    builder.Form.Add("testvar", "1"); 
    builder.HttpContext.User = new FakePrincipal(new FakeIdentity("UserName"), new string[] { "Role" });
    builder.HttpContext.Server.Stub(x => x.MapPath(Arg<string>.Is.Anything)).Return("Value");
    builder.InitializeController(controller);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多