2009-05-04 4 views
1

DotNetOpenAuth (공식적으로 DotNetOpenId라고 함) Response 개체를 사용하는 방법이 있습니다. 내 메소드는 요청 된 데이터를 추출하고,이 사용자가 우리 시스템에 있는지 확인하고, yadda yadda yadda ... 그리고 완료되면 auth 된 사용자 인스턴스를 리턴합니다.어떻게이 DotNetOpenAuth 응답 객체를 moq합니까?

지금은 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. .. 
} 

비웃음 프레임 워크 : MOQ
언어 : .NET C# 3.5 SP1
응답 개체 다음 DotNetOpenAuth 프레임 워크에서 찍은

답변

2

나는 특히 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); 

분명히보다는 당신이 테스트하는 방법에 resp 객체를 전달하려는 것 Console.WriteLine에 결과를 보냅니다.

+0

안녕하세요 앤드류 - 라이브러리를 좋아해요! 그래서, 나는 IAuthenticationResponse impliments TestAuthenticationResponse 개체를 만들어야 만하고 다양한 필드를 기대할 수 있습니까? –

+1

감사합니다. 당신은 ... 비록 Moq를 시도해 보았지만 인터페이스를 직접 구현하는이 클래스를 빌드 할 필요가 없다는 것을 보여주기 위해 나의 대답을 업데이트했습니다. 즐겨. –

+0

<3 Andrew :)이 모든 Moq 항목은 완전히 나를 혼란스럽게합니다. (그래서 나는 진실로 dl'ing moq에서 시간을내어 감사드립니다. MVC 샘플 RP 프로젝트에서 미래에 어떤 Moq 테스트도 볼 수 있습니까 (re : DotNotOpenAuth Visual Studion solution)? :) –