Domanda

Ho un metodo che include un DotNetOpenAuth (formalmente noto come DotNetOpenId) < oggetto code> Response . Il mio metodo estrae tutti i dati rivendicati, controlla se questo utente esiste nel nostro sistema, yadda yadda yadda ... e al termine restituisce l'istanza dell'utente autenticato.

Ora .. come posso usare moq per simulare questo oggetto di risposta, per testare il mio metodo di autenticazione ( 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. ..
}

Quadro beffardo: moq
Lingua: .NET C # 3.5 sp1
Oggetto risposta: tratto dal framework DotNetOpenAuth

È stato utile?

Soluzione

Non ho familiarità con Moq in particolare, ma l'oggetto response è un tipo che implementa DotNetOpenAuth.OpenId.RelyingParty.IAuthenticationResponse , quindi può essere facilmente deriso creando una classe che implementa il stessa interfaccia ed è pronto a restituire gli stessi tipi di valori.

... ho appena scaricato Moq e preso in giro una risposta IAuthentication in questo modo:

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

Ovviamente invece di inviare il risultato a Console.WriteLine vorresti passare l'oggetto resp al metodo che stai testando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top