hoy he pedido este question.Moq: no se ha podido convertir a la interfaz
Así que como moq crea su propia clase desde una interfaz no pude convertirla en una clase diferente.
Me llevé a preguntar qué pasaría si crease un ICustomPrincipal y traté de convertirlo en eso.
Así es como mi burla miran:
var MockHttpContext = new Mock<HttpContextBase>();
var MockPrincipal = new Mock<ICustomPrincipal>();
MockHttpContext.SetupGet(h => h.User).Returns(MockPrincipal.Object);
En el método que estoy tratando de probar el código de seguimiento da el error (de nuevo):
var user = (ICustomPrincipal)httpContext.User;
El error es el siguiente:
Unable to cast object of type 'IPrincipalProxy4081807111564298854aabfc890edcc8'
to type 'MyProject.Web.ICustomPrincipal'.
Supongo que todavía necesito algo de práctica con interfaces y moq pero no debería ser capaz de lanzar la clase que mo q creado de nuevo a ICustomPrincipal? Sé que httpContext.User devuelve un IPrincipal así que tal vez algo se pierde allí?
Bueno, si alguien puede ayudarme, lo agradecería.
Pickels
Editar:
conforme a lo solicitado el código completo del método que estoy probando. Todavía no está terminado, pero esto es lo que tengo hasta ahora:
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:
Parece que si uso Thread.CurrentPrincipal en lugar de HttpContext.Current.User puedo echarlo sin ningún problema . Leyendo sobre las diferencias entre los dos ahora.
Agregué el código a mi pregunta. – Pickels
¿Puede mostrarme cómo utiliza este método en el contexto de la prueba unitaria? Estoy viendo cómo configurar los objetos simulados y llamar al método en la prueba unitaria. – Shane