ранее сегодня я задал этот вопрос.
Таким образом, так как moq создает свой собственный класс из интерфейса, я не смог бросить его к другому классу.
Таким образом, это получило меня задающийся вопросом что, если я создал ICustomPrincipal и попытался бросить к этому.
Это - то, как смотрят мои насмешки:
var MockHttpContext = new Mock();
var MockPrincipal = new Mock();
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. Пользователь возвращает IPrincipal поэтому, возможно, что-то теряется там?
Хорошо, если бы кто-либо может помочь мне, я ценил бы это.
Pickels
Править:
Согласно просьбе полный код метода я тестирую. Это все еще не закончено, но это - то, что я имею до сих пор:
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:
Кажется этим, если я использую Поток. CurrentPrincipal вместо HttpContext.current.user я могу бросить его без проблемы. Чтение на различиях между двумя теперь.
В вашем примере кода показано, что вы имитируете контекст http и основные объекты.
Однако в вашем примере кода, в котором вы пытаетесь привлечь пользователя, трудно определить, используете ли вы Mock http-контекст или контекст, предоставленный платформой?
var user = (ICustomPrincipal)httpContext.User;
Используется ли указанная выше строка в методе или объекте с использованием внедрения зависимостей?
Можете ли вы показать мне метод / объект в целом?
Я предполагаю, что у вас есть некоторая путаница в пространствах имен / именах интерфейсов.
Вы уверены, что используете тот же ICustomPrincipal
, для которого создаете свой макет?
И почему в сообщении об ошибке говорится "IPrincipalProxy"? Вы где-то подражаете интерфейсу IPrincipal
? Тогда какая связь между IPrincipal
и ICustomPrincipal
?