azure-functions - 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.
有没有办法解决这个问题?
解决方案
您可以通过使用启动类并设置依赖注入来解决此问题。然后,您可以注入它使用的 IDocumentClient 接口,而不是生成 DocumentClient。从那里,您可以在测试期间模拟 IDocumentClient。
我在这里写了关于设置启动类的文章
推荐阅读
- javascript - cURL 命令有效,但 Fetch API 调用在响应负载中返回 200 和 400 验证错误
- r - 在 plotly R 中更改标题位置
- firebase - 在 NoSQL 数据库中手动排序
- node.js - express response.write中的nodejs变量
- bootstrap-4 - 引导折叠按钮响应但不起作用
- javascript - 如何使用 html 'a' 链接打开 Safari 中的现有选项卡?
- java - 如何在EditText中删除光标左侧的最后一个数字
- python - 如何找到随机数的步长范围
- scala - 如何解决 Apache Spark 中的偏斜度和输出文件大小
- javascript - React Native 将一个组件传递给另一个组件