About a year ago Phil Haack put this on his blog:
http://haacked.com/archive/2007/09/09/ihttpcontext-and-other-interfaces-for-your-duck-typing-benefit.aspx
It might help you with creating your own abstraction of HttpContext
(depending on how heavily you're relying on HttpContext).
On Mon, Nov 17, 2008 at 7:21 AM, Justin Chase <[EMAIL PROTECTED]> wrote:
> I don't know if you can effectively mock the HttpContext. It's sealed and
> has no interfaces... it's one massive side effect. I would recommend
> abstracting your use of it out to a custom class that wraps it and helps you
> break direct dependencies on it.
> One way I would recommend to do this is by using an IOC container and
> abstracting out the http context. So suppose all you want is the current
> User off of the HttpContext. Instead of directly referencing the context
> make an interface and class like this:
> public interface IHttpContext
> {
> IPrincipal User { get; }
> }
> public class HttpContextWrapper : IHttpContext
> {
> HttpContext _context;
> public HttpContextWrapper(HttpContext context)
> {
> _context = context;
> }
>
> public IPrincipal User { get { return _context.User; } }
> }
>
> Now in your code that used to call the context to get the user do something
> like this:
> IHttpContext context = Container.Create<IHttpContext>();
> IPrincipal user = context.User;
> Now to register it in your real code, at app initialization:
> Container.Register<IHttpContext>(() => return new
> HttpContextWrapper(HttpContext.Current));
> and using Rhino Mocks in your unit test library instead register it this
> way:
> IHttpContext context = MockRepository.GenerateMock<IHttpContext>();
> Container.Register<IHttpContext>(() => return context);
>
> The exact syntax for the container is just psuedo code above, it depends on
> the framework you're using but the concepts are generally the same. You use
> the container as a factory method to break dependencies between types. In
> the real app you register the real types in the test app you register mock
> types.
> On Mon, Nov 17, 2008 at 1:40 AM, chiragkumar maisuriya
> <[EMAIL PROTECTED]> wrote:
>>
>>
>>
>>> Hi Ayende,
>>>
>>> I am working on Rhino Mocks and trying to mock out the HttpContext for
>>> one of my Controller's Method using rhino Mocks but Finding a lot of
>>> troubles
>>>
>>> I am sending the my Method and Test Method. Please Suggest me some way
>>> so that I can mock out HttpContext Object for Unit Test my method.
>>>
>>>
>>> public override bool Execute(string moduleId, string actionId,
>>> HttpContext context)
>>>
>>> {
>>>
>>> switch (actionId)
>>>
>>> {
>>>
>>> case "Init":
>>>
>>> LoadData();
>>>
>>> break;
>>>
>>> default:
>>>
>>> break;
>>>
>>> }
>>>
>>> dealerBulletinDetailsEntity.ActionId = actionId;
>>>
>>> SetContext(dealerBulletinDetailsEntity, context);
>>>
>>> SetContext(rulesEntity, context);
>>>
>>> return RedirectUrl(moduleId, context);
>>>
>>> }
>>>
>>>
>>>
>>> Test Method
>>>
>>>
>>> [
>>>
>>> TestMethod()]
>>>
>>> public void ExecuteTest()
>>>
>>> {
>>>
>>> PolicyRulesController target = new PolicyRulesController(); // TODO:
>>> Initialize to an appropriate value
>>>
>>> string moduleId = string.Empty; // TODO: Initialize to an appropriate
>>> value
>>>
>>> string actionId = string.Empty; // TODO: Initialize to an appropriate
>>> value
>>>
>>> HttpContextBase context = MockRepository.GenerateStub<HttpContextBase>();
>>>
>>> bool expected = false; // TODO: Initialize to an appropriate value
>>>
>>> bool actual;
>>>
>>> actual = target.Execute(moduleId, actionId, context);
>>>
>>> Assert.AreEqual(expected, actual);
>>>
>>> Assert.Inconclusive("Verify the correctness of this test method.");
>>>
>>> }
>>>
>>>
>>>
>>> Thanks & Regards,
>>>
>>> Chirag
>>
>>
>
>
>
> --
> Justin Chase
> http://www.justnbusiness.com
>
> >
>
--
http://www.opgenorth.net
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Rhino.Mocks" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/RhinoMocks?hl=en
-~----------~----~----~----~------~----~------~--~---