ранее сегодня я задал этот вопрос .
Так как moq создает свой собственный класс из интерфейса, я не смог преобразовать его в другой класс.
Так что меня удивило, что если я создам ICustomPrincipal и попытаюсь привести его к этому.
Вот так выглядят мои издевательства:
var MockHttpContext = new Mock<HttpContextBase>();
var MockPrincipal = new Mock<ICustomPrincipal>();
MockHttpContext.SetupGet(h => h.User).Returns(MockPrincipal.Object);
В методе, который я пытаюсь проверить, следующий код выдает ошибку (снова):
var user = (ICustomPrincipal)httpContext.User;
Ошибка следующая:
Unable to cast object of type 'IPrincipalProxy4081807111564298854aabfc890edcc8'
to type 'MyProject.Web.ICustomPrincipal'.
Полагаю, мне все еще нужно попрактиковаться с интерфейсами и moq, но разве я не смогу привести класс, созданный moq, обратно к ICustomPrincipal? Я знаю, что httpContext.User возвращает IPrincipal, так что, может быть, что-то там потеряно?
Ну, если кто-нибудь может мне помочь, я был бы признателен.
Pickels
Edit:
По просьбе полный код метода я тестирую. Это все еще не закончено, но это то, что я до сих пор:
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:
Кажется, что если я использую Thread.CurrentPrincipal вместо HttpContext.current.user, я могу привести его без проблем. Читая о различиях между ними сейчас.