Moq: Не мог бросить для взаимодействия через интерфейс

ранее сегодня я задал этот вопрос.

Таким образом, так как 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 я могу бросить его без проблемы. Чтение на различиях между двумя теперь.

5
задан Community 23 May 2017 в 12:31
поделиться

2 ответа

В вашем примере кода показано, что вы имитируете контекст http и основные объекты.

Однако в вашем примере кода, в котором вы пытаетесь привлечь пользователя, трудно определить, используете ли вы Mock http-контекст или контекст, предоставленный платформой?

var user = (ICustomPrincipal)httpContext.User;

Используется ли указанная выше строка в методе или объекте с использованием внедрения зависимостей?

Можете ли вы показать мне метод / объект в целом?

1
ответ дан 14 December 2019 в 13:29
поделиться

Я предполагаю, что у вас есть некоторая путаница в пространствах имен / именах интерфейсов. Вы уверены, что используете тот же ICustomPrincipal, для которого создаете свой макет?

И почему в сообщении об ошибке говорится "IPrincipalProxy"? Вы где-то подражаете интерфейсу IPrincipal? Тогда какая связь между IPrincipal и ICustomPrincipal?

0
ответ дан 14 December 2019 в 13:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: