模拟 IAuthSession.GetOAuthTokens

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

//...

我正在围绕此服务功能创建一个单元测试,但 GetOAuthTokens 似乎是一个静态扩展方法,不能被 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" 函数的结果?

下面是 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;
}

所以它应该返回 session.ProviderOAuthAccess 中的所有标记,其中 provider == "somekey"