If you need to create some Fake MVC objects for testing MVC objects then here you are:
FakeControllerContext
using System.Collections.Specialized; using System.Web; using System.Web.Mvc; using System.Web.Routing; using System.Web.SessionState; using MvcContrib.TestHelper.Fakes; public class FakeControllerContext : ControllerContext { public FakeControllerContext(IController controller) : this(controller, null, null, null, null, null, null) { } public FakeControllerContext(IController controller, HttpCookieCollection cookies) : this(controller, null, null, null, null, cookies, null) { } public FakeControllerContext(IController controller, SessionStateItemCollection sessionItems) : this(controller, null, null, null, null, null, sessionItems) { } public FakeControllerContext(IController controller, NameValueCollection formParams) : this(controller, null, null, formParams, null, null, null) { } public FakeControllerContext(IController controller, NameValueCollection formParams, NameValueCollection queryStringParams) : this(controller, null, null, formParams, queryStringParams, null, null) { } public FakeControllerContext(IController controller, string userName) : this(controller, userName, null, null, null, null, null) { } public FakeControllerContext(IController controller, string userName, string[] roles) : this(controller, userName, roles, null, null, null, null) { } public FakeControllerContext ( IController controller, string userName, string[] roles, NameValueCollection formParams, NameValueCollection queryStringParams, HttpCookieCollection cookies, SessionStateItemCollection sessionItems ) : base(new FakeHttpContext(new FakePrincipal(new FakeIdentity(userName), roles), formParams, queryStringParams, cookies, sessionItems), new RouteData(), (Controller)controller) { } }
FakeHttpContext
using System; using System.Collections.Specialized; using System.Security.Principal; using System.Web; using System.Web.SessionState; public class FakeHttpContext : HttpContextBase { private readonly FakePrincipal principal; private readonly NameValueCollection formParams; private readonly NameValueCollection queryStringParams; private readonly HttpCookieCollection cookies; private readonly SessionStateItemCollection sessionItems; public FakeHttpContext(FakePrincipal principal, NameValueCollection formParams, NameValueCollection queryStringParams, HttpCookieCollection cookies, SessionStateItemCollection sessionItems) { this.principal = principal; this.formParams = formParams; this.queryStringParams = queryStringParams; this.cookies = cookies; this.sessionItems = sessionItems; } public override HttpRequestBase Request { get { return new FakeHttpRequest(this.formParams, this.queryStringParams, this.cookies); } } public override IPrincipal User { get { return this.principal; } set { throw new NotImplementedException(); } } public override HttpSessionStateBase Session { get { return this.sessionItems == null ? null : new FakeHttpSessionState(this.sessionItems); } } }
FakeHttpRequest
using System.Collections.Specialized; using System.Web; public class FakeHttpRequest : HttpRequestBase { private readonly NameValueCollection formParams; private readonly NameValueCollection queryStringParams; private readonly HttpCookieCollection cookies; public FakeHttpRequest(NameValueCollection formParams, NameValueCollection queryStringParams, HttpCookieCollection cookies) { this.formParams = formParams; this.queryStringParams = queryStringParams; this.cookies = cookies; } public override NameValueCollection Form { get { return this.formParams; } } public override NameValueCollection QueryString { get { return this.queryStringParams; } } public override HttpCookieCollection Cookies { get { return this.cookies; } } }
FakeHttpSessionState
using System.Collections; using System.Collections.Specialized; using System.Web; using System.Web.SessionState; public class FakeHttpSessionState : HttpSessionStateBase { private readonly SessionStateItemCollection sessionItems; public FakeHttpSessionState(SessionStateItemCollection sessionItems) { this.sessionItems = sessionItems; } public override void Add(string name, object value) { this.sessionItems[name] = value; } public override int Count { get { return this.sessionItems.Count; } } public override IEnumerator GetEnumerator() { return this.sessionItems.GetEnumerator(); } public override NameObjectCollectionBase.KeysCollection Keys { get { return this.sessionItems.Keys; } } public override object this[string name] { get { return this.sessionItems[name]; } set { this.sessionItems[name] = value; } } public override object this[int index] { get { return this.sessionItems[index]; } set { this.sessionItems[index] = value; } } public override void Remove(string name) { this.sessionItems.Remove(name); } }
FakePrincipal
using System.Linq; using System.Security.Principal; public class FakePrincipal : IPrincipal { private readonly IIdentity identity; private readonly string[] roles; public FakePrincipal(IIdentity identity, string[] roles) { this.identity = identity; this.roles = roles; } public IIdentity Identity { get { return this.identity; } } public bool IsInRole(string role) { return this.roles != null && this.roles.Contains(role); } }
The original article and source is from Stephen Walter Faking the Controller Context