2016-05-04 13 views
1

Ich habe einen Service-Stack-Dienst, der den folgenden Code verwendetMock IAuthSession.GetOAuthTokens

public MyResponse Get(MyRequest request){ 
    var authSession = GetSession(); 
    var tokens = authSession.GetOAuthTokens("somekey"); 

    var jwt = JwtPayload.Deserialize(tokens.AccessTokenSecret); 
    var clientId = jwt.Claims.First(x => x.Type == "client_id").Value; 

//... 

Ich bin ein Gerät zu testen, um diese Servicefunktion zu schaffen, aber es scheint, dass GetOAuthTokens eine statische Erweiterung Methode, die nicht verspottet werden kann von Moq (oder von irgendeinem Mocking-Framework für dieses Beispiel).

Dies ist meine aktuelle Testfunktion

[Test] 
    public void Get_ShouldReturnListOfApplications() 
    { 

     using (new BasicAppHost(typeof(ApplicationService).Assembly).Init()) 
     { 
      var req = new MockHttpRequest(); 
      req.Items[SessionFeature.RequestItemsSessionKey] = 
       new AuthUserSession 
       { 
        UserName = "Mocked", 
        RequestTokenSecret="test", 
        ProviderOAuthAccess = new System.Collections.Generic.List<IAuthTokens>() { MockTokens.Object } 
       }; 

      using (var service = HostContext.ResolveService<ApplicationService>(req)) 
      { 
       service.Client = MockServiceClient.Object; 
       service.Settings = MockSettingsProvider.Object; 

       var response = service.Get(TestApplicationRequest); 

      } 
     } 
    } 

Gibt es trotzdem, die Ergebnisse dieser „GetOAuthTokens“ -Funktion zu verspotten?

Antwort

2

Hier ist die Umsetzung des GetOAuthTokens() extension method:

public static IAuthTokens GetOAuthTokens(this IAuthSession session, string provider) 
{ 
    foreach (var tokens in session.ProviderOAuthAccess) 
    { 
     if (string.Compare(tokens.Provider, provider, StringComparison.InvariantCultureIgnoreCase) == 0) 
      return tokens; 
    } 
    return null; 
} 

So sollte es alle Tokens in session.ProviderOAuthAccess wo die provider == "somekey"

zurückkehren