Pergunta

Eu tenho um método que leva em um DotNetOpenAuth (formalmente conhecido como DotNetOpenId) Response objeto. Meu método extrai quaisquer dados reclamados, verifica para ver se o usuário existe no nosso sistema, yadda yadda yadda ... e quando retorna acabados a instância de usuário auth'd.

Agora .. como eu posso usar MOQ para zombar-se este objeto de resposta, para testar o meu método de autenticação (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. ..
}

Mocking quadro: moq
Idioma: .NET C # 3.5 SP1
objeto de resposta: tirado do quadro DotNetOpenAuth

Foi útil?

Solução

Eu não estou familiarizado com Moq em particular, mas o objeto de resposta é um tipo que implementa DotNetOpenAuth.OpenId.RelyingParty.IAuthenticationResponse, por isso pode ser facilmente ridicularizado por criar uma classe que implementa a mesma interface e é preparado para retornar os mesmos tipos de valores.

... acabou de baixar Moq e zombavam de um IAuthenticationResponse assim:

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);

Obviamente, em vez de enviar o resultado para Console.WriteLine você gostaria de passar o objeto resp para o método que você está testando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top