MrM*_*Man 1 unit-testing rhino-mocks mvccontrib mvccontrib-testhelper
我是MVCContrib Testhelper的新手和犀牛嘲笑.
我需要协助单元测试依赖于User.Identity.Name,Server.MapPath和Form Collection的控制器.
我开始了
var controller = new SubmitController();
var builder = new TestControllerBuilder();
builder.InitializeController(controller);
Run Code Online (Sandbox Code Playgroud)
我找到了这篇文章来设置User.Identity.Name
controller.ControllerContext = TestHelper.MockControllerContext(controller).WithAuthenticatedUser("domain\\username");
Run Code Online (Sandbox Code Playgroud)
此时,在我的控制器中,我现在可以访问User.Identity.然后问题变成了如何设置Form Collection变量.设置
builder.Form.Add("testvar","1");
Run Code Online (Sandbox Code Playgroud)
不再工作了.现在我似乎必须访问通过
controller.HttpContext.Request.Form.Add("testvar","1)
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但在这一点上,我不再使用上面的构建器(TestControllerBuilder).
然后,我不得不模拟服务器,这引起了更多的问题.如何继续使用构建器,但为httpContext,HttpRequest,Server等使用模拟或存根.我有点期望构建器具有为HttpRequest,Server等设置期望值的方法.
谢谢
当您替换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);
Run Code Online (Sandbox Code Playgroud)