2009-06-09 5 views
1

У меня есть AccountController, конструктор которого берет объект, полученный из моего пользовательского интерфейса IOpenIdAuthentication. По умолчанию это объект OpenIdAuthenticationService, который обертывает OpenIdRelyingParty. Интерфейс выглядит следующим образом:Как я могу протестировать контроллер ASP.NET MVC, который использует DotNetOpenId?

public interface IOpenIdAuthentication { 
    IAuthenticationResponse Response { get; } 
    IAuthenticationRequest CreateRequest(string identifier); 
} 

я могу издеваться IAuthenticationResponse:

_mockResponse = new Mock<IAuthenticationResponse>(MockBehavior.Loose); 
_mockResponse.SetupGet(r => r.ClaimedIdentifier).Returns(identifier); 
_mockResponse.SetupGet(r => r.Status) 
    .Returns(AuthenticationStatus.Authenticated); 
// ... removed the formatting of 'friendlyId' ... 
_mockResponse.SetupGet(r => r.FriendlyIdentifierForDisplay).Returns(friendlyId); 

Однако, я не знаю, как издеваться IAuthenticationRequest, как представляется, гораздо сложнее. Есть идеи?

ответ

1

Это не намного сложнее. Если вы выполняете только аутентификацию, то достаточно будет насмехаться над RedirectToProvider(). В простейшем случае это выглядит следующим образом:

_mockRequest = new Mock<IAuthenticationRequest>(MockBehavior.Strict); 
_mockRequest.Setup(r => r.RedirectToProvider()); 

Надеется, что это помогает

+0

Ах, спасибо! Раньше я не использовал насмешливую структуру, поэтому я не был уверен, что мне пришлось издеваться над каждой частью объекта. –

+0

Если вы новичок в Moq, обратите внимание на разницу между MockBehavior.Loose и MockBehavior.Strict. И в библиотеке Moq есть много автоматических издевательств. –

 Смежные вопросы

  • Нет связанных вопросов^_^