Hello,
earlier today I asked this question.
So since moq creates it's own class from an interface I wasn't able to cast it to a different class.
So it got me wondering what if I created a ICustomPrincipal and tried to cast to that.
This is how my mocks look:
var MockHttpContext = new Mock<HttpContextBase>();
var MockPrincipal = new Mock<ICustomPrincipal>();
MockHttpContext.SetupGet(h => h.User).Returns(MockPrincipal.Object);
In the method I am trying to test the follow code gives the error(again):
var user = (ICustomPrincipal)httpContext.User;
The error is the following:
Unable to cast object of type 'IPrincipalProxy4081807111564298854aabfc890edcc8'
to type 'MyProject.Web.ICustomPrincipal'.
I guess I still need some practice with interfaces and moq but shouldn't I be able to cast the class that moq created back to ICustomPrincipal? I know httpContext.User returns an IPrincipal so maybe something gets lost there?
Well if anybody can help me I would appreciate that.
Pickels
Edit:
As requested the full code of the method I am testing. It's still not finished but this is what I have so far:
public bool AuthorizeCore(HttpContextBase httpContext)
{
if (httpContext == null)
{
throw new ArgumentNullException("httpContext");
}
var user = (ICustomPrincipal)httpContext.User;
if (!user.Identity.IsAuthenticated)
{
return false;
}
return true;
}
Edit2:
Seems that if I use Thread.CurrentPrincipal instead of HttpContext.current.user I can cast it without a problem. Reading up on the differences between the two now.