Как я могу использовать этот объект ответа DotNetOpenAuth?
-
03-07-2019 - |
Вопрос
У меня есть метод, который использует DotNetOpenAuth (формально известный как DotNetOpenId) < code> 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. ..
}
Фреймворк Mocking: moq
Язык: .NET C # 3.5 sp1
Объект ответа: взят из инфраструктуры DotNetOpenAuth
Решение
Я не знаком с 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
в метод, который вы тестируете.