1

我是 MVCContrib Testhelper 的新手并使用 Rhino 进行模拟。

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

我从

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

我发现这篇文章用于设置 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 等的预期值。

谢谢

4

1 回答 1

5

当您更换了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);
于 2012-10-02T13:45:05.430 回答