2016-05-04 10 views
1

私は、このサービス機能を中心にユニットテストを作成していますが、GetOAuthTokensを嘲笑することはできません静的な拡張メソッドであると思われる次のコードモック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; 

//... 

を使用してサービススタックサービスを持っていますMoq(またはこの例ではMockingフレームワーク)によって作成されます。

これは私の現在のテスト機能

[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); 

      } 
     } 
    } 

はその「GetOAuthTokens」関数の結果を模擬するためにとにかくですか?ここで

答えて

2

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; 
} 

だから、provider == "somekey"

session.ProviderOAuthAccess内のすべてのトークンを返すべきです