Как я могу использовать этот объект ответа DotNetOpenAuth? - PullRequest
1 голос
/ 04 мая 2009

У меня есть метод, который принимает объект DotNetOpenAuth (формально известный как DotNetOpenId) Response. Мой метод извлекает любые заявленные данные, проверяет, существует ли этот пользователь в нашей системе, yadda yadda yadda ... и по окончании возвращает экземпляр auth'd пользователя.

Теперь .. как я могу использовать moq для макета этого объекта ответа, чтобы проверить мой метод аутентификации (AuthenticateUser())?

switch (response.Status)
{
    case AuthenticationStatus.Authenticated:

    User user = null;
    try
    {
        // Extract the claimed information and 
        // check if this user is valid, etc.
        // Any errors with be thrown as Authentication Errors.
        user = _authenticationService.AuthenticateUser(response) as User;
    }
    catch (AuthenticationException exception)
    {
        ViewData.ModelState.AddModelError("AuthenticationError", exception);
    }

    .. other code, like forms auth, other response.status' etc. ..
}

Рамка для насмешек: moq
Язык: .NET C # 3.5 sp1
Объект ответа: взят из фреймворка DotNetOpenAuth

1 Ответ

2 голосов
/ 05 мая 2009

В частности, я не знаком с Moq, но объект ответа - это тип, который реализует DotNetOpenAuth.OpenId.RelyingParty.IAuthenticationResponse, поэтому его легко смоделировать, создав класс, реализующий тот же интерфейс и готовый возвращать те же значения.

... только что скачал Moq и смоделировал IAuthenticationResponse следующим образом:

var response = new Mock<IAuthenticationResponse>(MockBehavior.Loose);
response.SetupGet(r => r.ClaimedIdentifier)
        .Returns("http://blog.nerdbank.net/");
response.SetupGet(r => r.Status)
        .Returns(AuthenticationStatus.Authenticated);
response.SetupGet(r => r.FriendlyIdentifierForDisplay)
        .Returns("blog.nerdbank.net");

IAuthenticationResponse resp = response.Object;
Console.WriteLine(resp.ClaimedIdentifier);

Очевидно, что вместо того, чтобы отправлять результат на Console.WriteLine, вам нужно передать объект resp в метод, который вы тестируете.

...