首页 > 解决方案 > Azure Functions 使用静态属性测试函数

问题描述

我可以像这样使用 Xunit 测试我的 Azure 函数:

var req = GenerateReq();
var res = await MyFunc.Run(req, logger);

如果在我的函数中生成一个 CosmosDb DocumentClient,如下所示:

    static DocumentClient docClient = GetCustomClient();

    private static DocumentClient GetCustomClient()
    {
        string cosmosUrl = string.Empty;
        string cosmosKey = string.Empty;
        cosmosUrl = Environment.GetEnvironmentVariable("cosmosUrl");
        cosmosKey = Environment.GetEnvironmentVariable("cosmosKey");
        DocumentClient customClient = new DocumentClient(new Uri(cosmosUrl), cosmosKey,
            new ConnectionPolicy
            {
                ConnectionMode = ConnectionMode.Direct,
                ConnectionProtocol = Protocol.Tcp,
                // Customize retry options for Throttled requests
                RetryOptions = new RetryOptions()
                {
                    MaxRetryAttemptsOnThrottledRequests = 10,
                    MaxRetryWaitTimeInSeconds = 30
                }
            });
        return customClient;
    }

当我尝试访问 docClient 时出现异常:

The type initializer for 'MyFunc.Get' threw an exception.

有没有办法解决这个问题?

标签: azure-functions

解决方案


您可以通过使用启动类并设置依赖注入来解决此问题。然后,您可以注入它使用的 IDocumentClient 接口,而不是生成 DocumentClient。从那里,您可以在测试期间模拟 IDocumentClient。

我在这里写了关于设置启动类的文章


推荐阅读