Вопрос

I am new to MVCContrib Testhelper and mocking with Rhino.

I am needing assistance with unit testing a controller which relies on User.Identity.Name, Server.MapPath and Form Collection.

I started off with

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

I found this post for setting User.Identity.Name

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

At this point, in my controller i am now able to get to the User.Identity. The problem then became how to i set Form Collection variables. Setting

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

no longer worked. It seemed that now I had to access via

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

This seemed to work, but at this point, i was no longer using builder(TestControllerBuilder) above.

I then had to mock Server which raised up more issues. How can I continue to use builder but use mocks or stubs for httpContext, HttpRequest, Server etc. I was sort of expecting that builder would have methods for setting expected values for HttpRequest, Server etc.

Thanks

Это было полезно?

Решение

When you replaced the controller's ControllerContext that removed the MVCContrib context. Try something like this:

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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top