Come posso moq questo oggetto di risposta DotNetOpenAuth?
-
03-07-2019 - |
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
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.