2009-05-04 13 views
1

Ich habe eine Methode, die ein DotNetOpenAuth (früher bekannt als DotNetOpenId) Response Objekt einnimmt. Meine Methode extrahiert alle beanspruchten Daten, überprüft, ob dieser Benutzer in unserem System vorhanden ist, yadda yadda yadda ... und gibt nach Abschluss die auth-Benutzerinstanz zurück.Wie moq ich dieses DotNetOpenAuth Response-Objekt?

Jetzt .. wie kann ich moq Mock-up dieses Antwortobjekt verwenden, um meine Authentifizierungsmethode (AuthenticateUser()) zu testen?

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. .. 
} 

Mockframework: moq
Sprache: C# .NET 3.5 SP1
Objekt Antwort: aus dem Rahmen DotNetOpenAuth genommen

Antwort

2

Ich bin nicht vertraut mit Moq insbesondere aber die Antwort Objekt ein Geben Sie das ein, das DotNetOpenAuth.OpenId.RelyingParty.IAuthenticationResponse implementiert, so dass es leicht gespottet werden kann, indem eine Klasse erstellt wird, die dieselbe Schnittstelle implementiert und bereit ist, die gleichen Arten von Werten zurückzugeben.

... heruntergeladen nur Moq und eine IAuthenticationResponse wie so verspottet:

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

Offensichtlich nicht das Ergebnis zu Console.WriteLine senden Sie würden Sie testen die resp Objekt an die Methode übergeben werden soll.

+0

Hallo Andrew - liebe die Bibliothek! Also, sollte ich ein TestAuthenticationResponse-Objekt machen, das IAuthenticationResponse und nur hart Code die verschiedenen Felder ich erwarte? –

+1

Danke. Du könntest ... obwohl ich gerade Moq ausprobiert habe und meine Antwort aktualisiert habe, um zu zeigen, dass du diese Klasse nicht bauen musst, die die Schnittstelle selbst implementiert. Genießen. –

+0

<3 Andrew :) All diese Moq-Sachen verwirren mich total :(Also, ich bedanke mich sehr für deine Zeit in dl'ing moq, etc. Würden wir in Zukunft irgendwelche Moq-Tests im MVC-Beispiel-RP-Projekt sehen (re: DotNotOpenAuth Visual Studion Lösung)? :) –